#include<reg51.h> #define uchar unsigned char #define uint unsigned int #define N 2 void rs232_init(); uchar flag,i; uchar code table[]="My No is "; uchar table1[N]; uchar j=0; //sbit led=P1^0; main() { rs232_init(); while(1) { if(flag==1) { ES=0; for(i=0;i<9;i++) { SBUF=table[i]; while(!TI); TI=0; } for(j=0;j<N;j++) { SBUF=table1[j]; while(!TI); TI=0; } j=0; ES=1; flag=0; } } } void rs232_init() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SM0=0; SM1=1; REN=1; EA=1; ES=1; } void ser()interrupt 4 { RI=0; table1[j++]=SBUF; if(j==N) flag=1; }
时间: 2024-02-10 21:34:29 浏览: 34
这段代码实现了基于 8051 单片机的串口通信功能。以下是代码的简单解释:
- `#include <reg51.h>` 是包含 8051 系列单片机的头文件。
- `#define uchar unsigned char` 定义了 `uchar` 为 `unsigned char` 类型。
- `#define uint unsigned int` 定义了 `uint` 为 `unsigned int` 类型。
- `#define N 2` 定义了 `N` 为 2。
- `void rs232_init();` 声明了一个名为 `rs232_init` 的函数,该函数用于初始化串口通信相关寄存器。
- `uchar flag,i;` 定义了两个 `uchar` 类型的变量 `flag` 和 `i`。
- `uchar code table[] = "My No is ";` 定义了一个常量字符串 `table`,内容为 "My No is "。
- `uchar table1[N];` 定义了一个长度为 `N` 的字符数组 `table1`。
- `uchar j=0;` 定义了一个 `uchar` 类型的变量 `j` 并初始化为 0。
- `sbit led = P1^0;` 定义了一个位于 P1.0 的 LED 作为示例输出。
- `main()` 是程序入口函数。
- `rs232_init()` 函数用于初始化串口通信相关寄存器,其中使用了 `TMOD` 寄存器设置定时器 1 为 8 位自动重装载定时器,并将其作为波特率发生器,同时设置串口工作在模式 1(8 位 UART,可变波特率),并打开 UART 的接收使能位 REN。使用 `ES` 和 `EA` 使能串口中断和总中断。
- `ser()` 函数是串口中断服务函数,当接收到一个字符时,该函数将其存入 `table1` 数组中,并检查是否接收到了 `N` 个字符,如果接收到了,则将 `flag` 标记为 1。
- `main()` 函数中循环检查 `flag` 是否为 1,如果为 1,则暂停串口中断,然后依次发送字符串 `table` 和数组 `table1` 中的内容,并将 `flag` 标记为 0。
如果有具体问题,可以继续提问。