📄 952.c
字号:
#include <REG952.H>
#include <intrins.H>
#include "16C554.h"
#include "uart.h"
#include "T0.h"
#define uchar unsigned char
#define uint unsigned int
#define SIZE2 10
extern uchar over, d554,s[8];
static bit cmdflag2=0;
static uchar check_sum2,command2[SIZE2],cmdpos2;
void protocol2(uchar cmd2)
{
if(cmdflag2 == 0)
{
TR0=1;
TH0=0x00; // 11.8ms T0重装初值
TL0=0x00;
command2[0] = cmd2;
cmdpos2 = 1;
cmdflag2 = 1;
check_sum2=command2[0];
}
else
{
command2[cmdpos2] = cmd2;
if(cmdpos2 <SIZE2-1) //表明数组没有溢出
{
check_sum2 += command2[cmdpos2];
}
else //数组溢出
{
over=1;
check_sum2 += command2[cmdpos2];
cmdflag2 = 0;
}
cmdpos2++;
}
}
//主函数
void main(void)
{
uchar chr,h,rt2;
P0M1=0x00; //配置P0为准双向口
P0M2=0x00;
P1M1=0x0e; //P1.6,P1.7接Serial_M1,Serial_M2配置为推换输出
P1M2=0xcd; //端口初始化P1.0,P1.1分别为推挽输出和输入,P1.2 1.3为开漏输出
P1M1=0x10|P1M1; //P1.4设置为中断输入
P1M2=0xEF&P1M1;
P2M1=0x00; //P2设置为推挽输出方式
P2M2=0x3F;
Serial_M1=0; //将扩展的八个串口都定义为RS232
Serial_M2=0;
Serial_M3=0;
Serial_M4=0;
Serial_M5=0;
Serial_M6=0;
Serial_M7=0;
Serial_M8=0;
//P4.4=nWR P4.5=nRD P4.6=WR P4.7=LATCH
P4M1=0x08; //uart1,P4.2设置为推挽输出方式 P4.3为输入 其它为推挽输出
P4M2=0xFB;
P5M1=0x00;
P5M2=0xFF; //P5设置为推挽输出方式
T0_init();
EA=1; //开总中断
IT1=0; //外部中断1低电平触发中断
EX1=1; //外部中断1使能位
IP0H=0x14; //设置外部中断优先级为2级,UART0接收中断为3级
IP0=0x10;
for(h=0;h<8;h++)
{
SC16C554_SET(s[h],38400);
SC16C554_Write(s[h]|THR, 0xff);
}
UART0_Init(); //串口初始化
while(1)
{
rt2=com_getchar554(&chr);
if(rt2==1)
{
protocol2(chr);
}
if(over)
{
uchar r;
TR0=0;
cmdflag2=0;
com_putchar(d554+1);
for(r=0;r<cmdpos2;r++)
{
com_putchar(command2[r]);
}
com_putchar(check_sum2);
over=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -