|
以下是我刚刚临时写的程序,功能是当下位机收到上位机发来的ASCII码为0x41时,下位机则向上位机发送一个值为32769的Int类型的数字,主要功能函数是 SendIntToPort。硬件环境采用 22.1184MHz 的晶振,通讯频率采用 57600bps 的频率进行通讯,若采用 11.0592 的晶振,可将
PCON = 0x80 来使用,通讯频率同样是 57600bps 的频率。
具体代码如下:
- #include
- #define RELOAD_COUNT 0xFF //22.1184MHz,12T,SMOD=0,57600bps
- void Initialize_Stoppage(void);
- void SendToPort(unsigned char Buf);
- void SendIntToPort(unsigned int Buf)
- unsigned int SData = 32769; //要发送的int类型数据
- //============================ 主程序 ============================
- main()
- {
- Initialize_Stoppage(); //初始化串口中断
- while(1);
- }
- //============================ 串口中断处理 ============================
- void COM_Event () interrupt 4
- {
- unsigned char dat = 0;
- if(RI == 1)
- {
- dat = SBUF; //接收数据
- if(dat == 0x41){ //判断上位机发送的是不是一个字符串 "A" 过来
- SendIntToPort(SData);
- }
- RI = 0;
- }else{
- TI = 0;
- }
- }
- //============================ 初始化串口中断 ============================
- void Initialize_Stoppage(void)
- {
- TMOD = 0x20;
- PCON = 0x00;
- SCON = 0x50;
- TL1 = RELOAD_COUNT;
- TH1 = RELOAD_COUNT;
- ES = 1;
- TR1 = 1;
- EA = 1;
- }
- //============================ 发送数据给串口 ============================
- void SendToPort(unsigned char Buf)
- {
- ES = 0; //关串口中断
- TI = 0; //清零串口发送完成中断请求标志
- SBUF = Buf; //设置发送数据缓冲区内容
- while(TI == 0); //等待发送完成
- TI = 0; //清零串口发送完成中断请求标志
- ES = 1; //允许串口中断
- }
- //============================ 发送字符串数据给串口(数据长度最多为255) ============================
- void SendIntToPort(unsigned int Buf)
- {
- SendToPort(Buf/256);
- SendToPort(Buf%256);
- }
复制代码 |
|