c8051f320学习,单片机不外乎时钟、IO、串口、USB等外设用法

时钟

IO(输入、输出,如何配置)

IO

数字和模拟资源可以通过25个I/O 引脚(C805 1F3 2 0 ),每个端口引脚都可以被定义为1 通用I/O(GPIO)或 0 模拟输入

所有端口I/O 都耐5V电压

端口I/O 单元可以被配置为漏极开路或推挽方式,口输出方式寄存器PnMDOUT 中设置,n =  0,1, 2, 3

P1MDOUT |= 0x0F;//0000  1111    置P1的0-3口为1即推挽输出方式

P2MDOUT |= 0x0C;//0000 1100 对应 P2.2、P2.3推挽输出

寄存器XBR0 和XBR1 用于为数字I/O 资源分配物理I/O 引脚

 

PnMDIN 选择所有端口引脚的输入方式(模拟或数字)

 

注意:为使端口P0、P1和P2. 0  ~  P2 .3 工作在标准端口I/O 输入/输出方式,交叉开关必
须被使能。当交叉开关被禁止时,端口输出驱动器被禁止。P2.4 ~  P2.7 和P3.0 总是作为标准
GPIO 使用

 

XBR1 |= ( 1<<6 );


USB时钟

 

C8051F 320/ 1 有一个可编程内部振荡器、一个外部振荡器驱动电路和一个4 倍时钟乘法器
可以通过对OSCICN 和OSCICL 寄存器编程来使能/ 禁止内部振荡器和调节其输出频率(如图
13.1 所示)。系统时钟(SYSCLK )可以来自内部振荡器、外部振荡器电路或4 倍时钟乘法器
二分频。USB 时钟(USBCLK )可以来自内部振荡器、外部振荡器电路或4 倍时钟乘法器。
表13.3 给出了内部振荡器的电气特性

一旦内部振荡器的频率被修改,则它不能再被用作USB 时钟

4 倍时钟乘法器允许使用12 M Hz 振荡器产生全速USB 通信所需要的48MHz 时钟

用CLKMUL寄存器配置4 倍时钟乘法器。配置和使能4 倍时钟乘法器的步骤如下:
1 .通过向寄存器CLKMUL写0x00来复位时钟乘法器。
2 .用MULSEL位选择时钟乘法器的输入。
3 .用MULEN位使能时钟乘法器(CLKM UL | = 0x80 )。
4 .延时大于5 µs 。
5 .用MULINIT位初始化时钟乘法器(CLKMUL |  = 0 x C 0 )。
6 .查询等待MULRDY => ‘1 ’。

//都是一样的乘法寄存器配置

void Clock_Init( void )
{
     INT8U i;
     if( ( CLKMUL & ( 1<<5 ) ) ) return;//如乘法寄存器锁定,则返回
     CLKMUL = 0;
     CLKMUL |= ( 1<<7 );//时钟乘法器使能位
     for( i = 0; i < 250; i ++ );//延迟
     CLKMUL |= 0xC0;//1100 0000 ,初始化时钟乘法器
     for( i = 0; i < 250; i ++ );
     while( !( CLKMUL & ( 1<<5 ) ) );//时钟乘法器稳定后,MULRDY的读出值为‘1 ’
     CLKSEL = ( 2<<0 );
}



串口

 

void Port_Init (void)
{
   XBR1     = 0x40;                    // Enable crossbar and weak pullups
    XBR0      = 0x01;
     P0MDOUT |= 0x10;                    // Set TX pin to push-pull
}

void UART0_Init (void)
{
   SCON0 = 0x10;               // 0x0001 0000      8位UART  无  停止位的逻辑电平被忽略 UART0接收允许

//    SCON0: 8-bit variable bit rate
                                       //        level of STOP bit is ignored
                                       //        RX enabled
                                       //        ninth bits are zeros
                                       //        clear RI0 and TI0 bits

//配置T1M 、SCA1:0

if (SYSCLK/BAUDRATE/2/256 < 1) {
      TH1 = -(SYSCLK/BAUDRATE/2);
      CKCON |=  0x08;                  // T1M = 1; SCA1:0 = xx
   } else if (SYSCLK/BAUDRATE/2/256 < 4) {
      TH1 = -(SYSCLK/BAUDRATE/2/4);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
      CKCON |=  0x01;
   } else if (SYSCLK/BAUDRATE/2/256 < 12) {
      TH1 = -(SYSCLK/BAUDRATE/2/12);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
   } else if (SYSCLK/BAUDRATE/2/256 < 48) {
      TH1 = -(SYSCLK/BAUDRATE/2/48);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
      CKCON |=  0x02;
   } else {
      while (1);                       // Error.  Unsupported baud rate
   }

TL1 = TH1;                          // init Timer1
   TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;
   TR1 = 1;                            // START Timer1
   TI0 = 1;                            // Indicate TX0 ready
}



ADC

用配置器来配置:

ADC0CN = 0x02;                      // ADC0 disabled, normal tracking,
                                       // conversion triggered on TMR2 overflow ADC0用时钟2来触发

EIE1 |= 0x08;                       // enable ADC0 conversion complete int.中断配置

在ADCMUX设置那里选P2.4,和GND。引脚配置

AMX0P = 0x0C;                       // ADC0 positive input = P2.4
   AMX0N = 0x1F;                       // ADC0 negative input = GND
                                       // i.e., single ended mode

P2MDIN    = 0xEF;//P2.4设置为模拟输入,portinit处

还要串口配置和时钟2



I2C

void SMBus_Init(void);
void SMBus_ISR(void);

时间: 2024-11-06 03:51:55

c8051f320学习,单片机不外乎时钟、IO、串口、USB等外设用法的相关文章

学习单片机的步骤

学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制. 第一步:数字I/O的使用 使用按钮输入信号,发光二极管显示输出电平,就可以学习引脚的数字I/O功能,在按下某个按钮后,某发光二极管发亮,这就是数字电路中组合逻辑的功能,虽然很简单,但是可以学习一般的单片机编程思想,例如,必须设置很多寄存器对引脚进行初始化处理,才能使引脚具备有数字输入和输出输出功能.每使用单片机的一个功能,就要对控制该功能的寄存器进行设置,这就是单片机

如何以学习单片机为契机,逐步成为优秀的工程师

现状 不知道阅读本文的读者,在初学单片机时是否和我曾经一样迷茫.看到各种新的术语,疑惑不解:不知道从何学起:照着书中的例子一步一步做都没有问题,但是自己试着做东西,遇到各种问题却不会解决,向别人提问,可能也没有几个人回答:感觉好像学完了单片机的各种模块,但是要自己设计东西却还是毫无思路,也不知道怎么去进一步深入学习:甚至在一开始就遇到太多困难,直接放弃了学习. 在我身边,看到不少学习单片机的人.其中很多人学习的方法,就是通过看一些视频或书籍教程,然后照着别人的代码去写,写好了能用了,就感觉是学会

怎样以学习单片机为契机,逐步成为优秀的project师

现状 不知道阅读本文的读者,在初学单片机时是否和我以前一样迷茫.看到各种新的术语,疑惑不解:不知道从何学起:照着书中的样例一步一步做都没有问题,可是自己试着做东西,遇到各种问题却不会解决,向别人提问,可能也没有几个人回答:感觉好像学完了单片机的各种模块,可是要自己设计东西却还是毫无思路,也不知道怎么去进一步深入学习:甚至在一開始就遇到太多困难,直接放弃了学习. 在我身边,看到不少学习单片机的人.当中非常多人学习的方法,就是通过看一些视频或书籍教程,然后照着别人的代码去写,写好了能用了,就感觉是学

工业串口触摸屏开发制作mp3播放器,单片机或PLC通过串口控制播放MP3音频方法

在工业控制系统中将音乐或语音MP3的美和工控结合在一起,给人以赏心悦目的感受.随着工业控制的发展,对工业控制的控制要求也越来越高,使得越来越多的控制部分不是指简单的现场控制,还需要增加音乐播放或语音提示,使得控制系统更加人性化. 这里介绍广州易显的工业串口触摸屏或者ARM工控机连接单片机或者PLC,使用工业串口触摸屏开发制作mp3的方法.跟电脑的播放器一样,具有播放,暂停,停止,控制播放进度,上一首,下一首等功能.可以在人机界面上控制播放MP3音乐或者语音提示.也可以使用单片机或PLC控制播放的

51单片机GPIO口模拟串口通信

51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于: 分类: 深入C语言(20) 作者同类文章X 1 #include "reg52.h" 2 #include "intrins.h" 3 #include "math.h" 4 #include "stdio.h" 5 sbit BT_SND =P1^5; 6 sbit

STM32学习笔记(四)——串口控制LED(中断方式)

目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类型并使能串口中断 七.编写中断服务函数函数名格式为函数名格式为 USARTxIRQHandler(x 对应串口号). 八.主函数的实现. 一.时钟使能,包括GPIO的时钟和串口的时钟使能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //

AVR第10课:学习单片机到底在学习什么

我们看看MCS-51单片机和AVR单片机就可以知道学习单片机的一些共同点,我们可以总结一下.从CPU的角度来说,有以下几点. 1.首先就是单片机的最小系统:单片机能够运行起来的最小条件.一般是电源.晶振电路和复位电路. 2.学会对单片机的IO口进行操作:控制外围电路,这个会随着单片机等级的提升变得复杂一点,IO的功能也会增加.这个是学习单片机要学会的最基础的知识,也是掌握其他特殊功能的基础. 3.中断系统的学习:一般来说中断系统都会有外部中断.定时器/计数器中断.串口中断等等,说实话,学习中断系

单片机学习方法总结,给初学者分享如何怎样学习单片机

从刚开始接触单片机,到现在已经有3年的时间了,在这期间学习和使用了51单片机.飞思卡尔单片机,LPC2138,PIC16F887等系列的单片机,每接触一款单片机,都会经历熟悉其基本开发,然后将其用于项目中的过程,对于如何学习一款单片机,自己做了如下的总结. 大家都知道,51单片机是最容易入门的,不仅因为其编程简单,更重要的是网上的资料非常丰富.所以一般学习单片机开发的都将51单片机作为入门开发的首选.我学习51单片机的时候是采用这样的一个步骤进行学习的: ![](https://s1.51cto

[游戏学习28] MFC 时钟

>_<:这是一个时钟小程序 >_<:通过调用获得系统时间然后经过计算得出当前时间,然后再以3个圆环表示时分秒. >_<:TAO_CLOCK.h 1 class CMyApp : public CWinApp 2 { 3 public: 4 virtual BOOL InitInstance (); 5 }; 6 7 class CMainWindow : public CFrameWnd 8 { 9 protected: 10 11 12 int m_nPrevSeco