一、轮询发送
程序实例1:
-
- #include
//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 - #include"delay.h"
- /*------------------------------------------------
- 函数声明
- ------------------------------------------------*/
- void SendStr(unsigned char *s);
- /*------------------------------------------------
- 串口初始化
- ------------------------------------------------*/
- void InitUART (void)
- {
-
- SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
- TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
- TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
- TR1 = 1; // TR1: timer 1 打开
- EA = 1; //打开总中断
- //ES = 1; //打开串口中断
- }
- /*------------------------------------------------
- 主函数
- ------------------------------------------------*/
- void main (void)
- {
-
- InitUART();
-
- while (1)
- {
- SendStr("UART test!");
- DelayMs(240);//延时循环发送
- DelayMs(240);
- }
- }
-
- /*------------------------------------------------
- 发送一个字节
- ------------------------------------------------*/
- void SendByte(unsigned char dat)
- {
- SBUF = dat;
- while(!TI);
- TI = 0;
- }
- /*------------------------------------------------
- 发送一个字符串
- ------------------------------------------------*/
- void SendStr(unsigned char *s)
- {
- while(*s!='\0')// \0 表示字符串结束标志,
- //通过检测是否字符串末尾
- {
- SendByte(*s);
- s++;
- }
- }
二、中断收发
程序实例2:
- #include
//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 -
- /*------------------------------------------------
- 函数声明
- ------------------------------------------------*/
- void SendStr(unsigned char *s);
-
- /*------------------------------------------------
- 串口初始化
- ------------------------------------------------*/
- void InitUART (void)
- {
-
- SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
- TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
- TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
- TR1 = 1; // TR1: timer 1 打开
- EA = 1; //打开总中断
- // ES = 1; //打开串口中断
- }
-
-
- /*------------------------------------------------
- 主函数
- ------------------------------------------------*/
- void main (void)
- {
-
- InitUART();
-
- SendStr("UART test!");
-
- ES = 1; //打开串口中断
- while (1)
- {
-
- }
- }
-
- /*------------------------------------------------
- 发送一个字节
- ------------------------------------------------*/
- void SendByte(unsigned char dat)
- {
- SBUF = dat;
- while(!TI);
- TI = 0;
- }
-
- /*------------------------------------------------
- 发送一个字符串
- ------------------------------------------------*/
- void SendStr(unsigned char *s)
- {
- while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
- {
- SendByte(*s);
- s++;
- }
- }
-
- /*------------------------------------------------
- 串口中断程序
- ------------------------------------------------*/
- void UART_SER (void) interrupt 4 //串行中断服务程序
- {
- unsigned char Temp; //定义临时变量
-
- if(RI) //判断是接收中断产生
- {
- RI=0; //标志位清零
- Temp=SBUF; //读入缓冲区的值
- P1=Temp; //把值输出到P1口,用于观察
- SBUF=Temp; //把接收到的值再发回电脑端
- }
- if(TI) //如果是发送标志位,清零
- TI=0;
- }