实验目的:
1.掌握51单片机串口工作模式及相关寄存器配置方法
2.了解51单片机波特率的计算方法
3.掌握单片机串口接收中断服务函数的设计方法
程序说明:
1.通过USB连接线连接PC机,在计算机硬件管理器中查看串口号
2.打开串口调试工具软件,并将串口通讯波特率设定为2400
3.将跳线J13配置为MM模式
4.输入1-8字符,控制8个LED指示灯状态
基于国信长天单片机竞赛实训平台的串口程序设计如下
#include "reg52.h" //定义51单片机特殊功能寄存器
#include "absacc.h"
#define BAUD 2400 //波特率
#define SYSTEMCLOCK 11059200L //系统时钟频率
sfr AUXR = 0x8e;
bit rxc = 0;
char rx = '1';
void uart_sendstring(unsigned char *str);
//主函数
void main(void)
{
SCON = 0x50;
AUXR = 0x40; //1T
TMOD = 0x00; //
TL1 = (65536 - (SYSTEMCLOCK/4/BAUD)); //
TH1 = (65536 - (SYSTEMCLOCK/4/BAUD))>>8;
TR1 = 1;
ES = 1;
EA = 1;
while(1)
{
if(rxc == 1) {
rxc = 0;
switch(rx) {
case '1':
XBYTE[0x8000] = 0xFE;
break;
case '2':
XBYTE[0x8000] = 0xFD;
break;
case '3':
XBYTE[0x8000] = 0xFB;
break;
case '4':
XBYTE[0x8000] = 0xF7;
break;
case '5':
XBYTE[0x8000] = 0xEF;
break;
case '6':
XBYTE[0x8000] = 0xDF;
break;
case '7':
XBYTE[0x8000] = 0xBF;
break;
case '8':
XBYTE[0x8000] = 0x7F;
break;
default:
uart_sendstring("error\r\n"); //输入其他数据返回error
break;
}
ES = 1;
}
}
}
//串口中断服务函数
void isr_uart(void) interrupt 4
{
if(RI)
{
RI = 0; //清除接收标志位
rx = SBUF;
ES = 0;
rxc = 1;
}
}
//通过串口发送字符串
void uart_sendstring(unsigned char *str)
{
unsigned char *p;
p = str;
while(*p != '\0')
{
SBUF = *p;
while(TI == 0); //等待发送标志位置位
TI = 0;
p++;
}
}
评论(0)
您还未登录,请登录后发表或查看评论