⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.c

📁 51串口通讯例程,含串行发送接收KEIL C源代码
💻 C
字号:
// 题目:串口初始化C代码
// 要求:
// 1.波特率1200bps,无奇偶校验,停止位1,数据位8
// 2.定时器T1做波特率发生器

// 软件模拟测试说明:
// 1.这个测试采用查询方式进行串口通讯
// 2.将软件仿真环境的晶震设为11.0592 MHz
// 3.软件模拟全速运行, 观察波特率是1200bps
// 4.在串口1中输入数字或字母,可观察到通讯是否有误。
 
//#pragma src

#include <reg51.h>

//串口初始化
void serial_init(void)
{
   //ET1  = 0;     //CLR   0ABH      ;禁止T1中断
   TMOD = 0x20;  //MOV   89H,#20H  ;timer 1 mode 2: 8-Bit reload(定时器T1 模式2: 8位自动初值重装)
   TH1  = 0xE8;  //MOV   8DH,#0E8H
   TL1  = 0xE8;  //MOV   8BH,#0E8H ;1200bps, 11.059
   TR1  = 1;     //SETB  8EH       ;启动定时器1
   
   SCON = 0x50;  // mode 1: 10-bit UART, enable receiver(模式1: 10位异步发送/接收, 使能接收允许位)
   //SM1  = 1;     //                ;串行口 模式1
   //SM0  = 0;
   //REN  = 1;     //                ;允许串行中断接收

   SM2  = 1;     //SETB  O9DH      ;收到有效的停止位时才将RI置1
                  
   ES   = 1;     //SETB  0ACH      ;允许串行中断 
   EA   = 1;     //SETB  0AFH      ;总中断开
}

//中断方式处理串口数据

void serial(void) interrupt 4 using 1
{
	if(RI)
	{
	   // RI = 0;
      // 串口接收, 采用临时缓冲
	}
#if 0
   if(TI)
   {
      // TI = 0;
      // 串口发送, 没有必要使用中断方式
   }
#endif

}

// 查询方式接收串口数据
unsigned char getchar(void)
{
   while(!RI);// 没有收到串口数据则一直等待
   RI=0;
   return SBUF;
}
// 查询方式发送串口数据
void putchar(unsigned char ch)
{
   SBUF=ch;
   while(!TI);
   TI=0;
}

code unsigned char HEX_TAB []="0123456789ABCDEF";
void puthex(unsigned char ch)
{
   unsigned char i,j;
   i=ch>>4;
   j=ch&0x0f;
   putchar(HEX_TAB[i]);
   putchar(HEX_TAB[j]);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -