|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
多种波特率封装成函数,方便使用。
5 x1 K- c8 E/ P2 r* [0 i$ B11.0592Mhz,12.00Mhz波特率都配置好了,直接改参数调用就行,附详细注释方便学习/ j" g, s$ D- z8 M) ]9 u
全部亲自试过了,误差0.00%
2 ]/ @7 I, _& Q. _+ S1 Y, P# `/ ~) S
/ ]+ d0 J0 H& K6 _2 j# J, }: O" L![]()
+ y- P7 p6 a" S' l
1 N$ e' H6 s0 T1 P8 O0 E( x! T' Y6 P/ e3 p4 R; b. y4 x5 A: k! r
运行截图:8 j* K, a- _2 a# _ Q# D) Y
(注意串口通信波特率与程序一致)' b( i' P ^8 C1 } \) H) M: A
![]()
+ u$ L! g3 b& ?2 T, m8 [0 G- b
# h R" h$ S2 k# F) _单片机源程序如下:( k( z, ^- ?- ]- g6 R
- #include <STC12C5A60S2.H>
- void UART_Init(unsigned int BaudRate) //串口初使化函数 11.0592Mhz 12单片机
- {
- unsigned char TH1_Dat;
- unsigned char PCON_Dat;
- switch(BaudRate)
- {
- case 1200: TH1_Dat=0xE8; PCON_Dat=0x00; break;
- case 2400: TH1_Dat=0xF4; PCON_Dat=0x00; break;
- case 4800: TH1_Dat=0xFA; PCON_Dat=0X00; break;
- case 9600: TH1_Dat=0xFD; PCON_Dat=0x00; break;
- case 14400: TH1_Dat=0xFE; PCON_Dat=0X00; break;
- }
- TMOD &= 0x0F; //清除高4位数据
- TMOD |= 0x20; //定时器工作模式,0x20-工作方式2:8位自动重装载模式
- SCON = 0x50; //串行口工作方式控制寄存器,当前为1
- //Bit[7:6],00为工作方式0,01方式1,10方式2,11方式3
- TH1 = TH1_Dat; //8位自动重装载定时器模式下,TH1被用作自动重装载值寄存器
- TL1 = TH1_Dat; //TL1为计数寄存器
- PCON |= PCON_Dat; //Bit7-波特率倍增位:0-不培增 1-培增
- EA = 1; //打开总中断
- ES = 1; //串口中断允许位
- TR1 = 1; //定时器1开始计数
- }
- //void UART_Init(unsigned int BaudRate) //串口初使化函数 12.00Mhz 12单片机
- //{
- // unsigned char TH1_Dat;
- // unsigned char PCON_Dat;
- // switch(BaudRate)
- // {
- // case 1200: TH1_Dat=0xCC; PCON_Dat=0x80; break;
- // case 2400: TH1_Dat=0xE6; PCON_Dat=0x80; break;
- // case 4800: TH1_Dat=0xF3; PCON_Dat=0X80; break;
- // }
- // TMOD &= 0x0F; //清除高4位数据
- // TMOD |= 0x20; //定时器工作模式,0x20-工作方式2:8位自动重装载模式
- // SCON = 0x50; //串行口工作方式控制寄存器,当前为1
- // //Bit[7:6],00为工作方式0,01方式1,10方式2,11方式3
- // TH1 = TH1_Dat; //8位自动重装载定时器模式下,TH1被用作自动重装载值寄存器
- // TL1 = TH1_Dat; //TL1为计数寄存器
- // PCON |= PCON_Dat; //Bit7-波特率倍增位:0-不培增 1-培增
- // EA = 1; //打开总中断
- // ES = 1; //串口中断允许位
- // TR1 = 1; //定时器1开始计数
- //}
- void main()
- {
- UART_Init(14400);
- while(1);
- }
- void Usart() interrupt 4
- {
- unsigned char receiveData;
- receiveData=SBUF; //出去接收到的数据
- RI = 0; //清除接收中断标志位
- SBUF=receiveData; //将接收到的数据放入到发送寄存器
- while(!TI); //等待发送数据完成
- TI=0; //清除发送完成标志位
- }
3 L6 J, T1 x2 F8 V# p
# P% E0 k4 `8 D& O" D |
|