STC12C5202AD 51单片机串口通信配置模板

来源:互联网 发布:淘宝经营许可 编辑:程序博客网 时间:2024/04/29 17:25

定时器方式2:  8位自动重装   波特率 9600

#include<reg52.h>       void delayms(int x)  {      int i, j;      for(i = x; i; --i)      for(j= 110; j; --j);      return ;  }  void initSCI(void)    {    SM0 = 0;      /*Step 1 :  确定串口通信方式*/          SM1 = 1;               TMOD = 0x20;  /*step 2: 根据串口通信方式 确定是否设置波特率*/           TH1  = 0xfd;          TL1  = 0xfd;                    TR1  = 1;     /*step 3 :启动*/          REN  = 1;          EA = 1;       /*step 4: 是否启用中断函数*/          ES = 1;     }        void putChar (unsigned char chr)//发送一个字符    {        SBUF = chr;                                                      }        void putStr(unsigned char str[], unsigned char n)    {        while( n-- )        {            SBUF = str[n];    delayms(1);     }    }          int main()      {          initSCI();                   while(1)        {    putChar('A');        //operation;          }            return 0;       }            void ser() interrupt 4      {          if( RI )          {              RI = 0;              /*Operation SBUF*/          }          if( TI )          {              TI = 0;           }          return ;      } 


Clue 1:发送函数中加延时  否则乱码

Clue 2:ISP软件烧写时 Step4选择外部晶体振荡器  否则乱码

(注意串口中断和发送函数  TI清零重复了 导致无法连续发送)

#include "reg51.h"#include "intrins.h"void SendData(unsigned char dat);void SendString(char *s);void delay(unsigned char n){unsigned char i, j;for(i = n; i; --i)for(j = 110; j; --j);}void main(){SCON = 0x50;TMOD = 0x20;TH1 = TL1 = 0xfd;TR1 = 1;ES  = 1;EA  = 1;SendString("STC12C5201AD\r\nUart Test!\r\n");while(1);}void Uart_Isr() interrupt 4 using 1{if( RI ){RI = 0;}if(TI){TI = 0;}}void SendData(unsigned char dat){SBUF = dat;while(!TI);delay(5);TI = 0;delay(5);}void SendString(char *s){while(*s){SendData(*s++);}}


原创粉丝点击