文档介绍:基于STC12C5A60S2的单片机与欧姆龙触摸屏的通讯
备注:位操作控制&读单片机的IO口,寄存器操作读&写单片机内部的eeprom。
通过实际验证,程序直接可用!
#include <>
uchar data resvbuf[16];//接收数组
uchar data Sendbuf[16];//发送数组
uchar resvCount; //接收字节数
uchar SendCount; //发送字节数
char TimeInterval;//计时数
sbit bit0=P1^0;
sbit bit1=P1^1;
sbit bit2=P1^2;
sbit bit3=P1^3;
sbit bit4=P1^4;
sbit bit5=P1^5;
sbit bit6=P1^6;
sbit bit7=P1^7;
sbit bit8=P4^0;
sbit bit9=P4^1;
sbit bit10=P4^2;
sbit bit11=P4^3;
sbit bit12=P2^4;
sbit bit13=P2^5;
sbit bit14=P2^6;
sbit bit15=P2^7;
void delay_ms(unsigned char ms);
void modbus_init(void);
void Init_timer0(void);
#define D_TIMER0 2000 // 选择定时器时间us,注意不要溢出,溢出时编译会报错。
/******************************************/
#define Timer0_Reload_s ((MAIN_Fosc / 1000) * D_TIMER0 / 12000)
#if (Timer0_Reload_s < 65536)
#define Timer0_Reload (65536 - Timer0_Reload_s)
#endif
/*========================================================================
// 函数: void delay_ms(unsigned char ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数.
// 返回: none.
// 版本:
// 日期: 2010-12-15
// 备注:
//=======================================================================*/
void delay_ms(unsigned char ms)
{
unsigned int i;
do{
i = MAIN_Fosc / 14000;//14000
while(--i) ; //14T per loop
}while(--ms);
}
/*---------------------------------------------------------------------------
函数说明:从机初始化
---------------------------------------------------------------------------*/
void modbus_init(void)
{
Sendbuf[0]=0x01; //本机地址
}
/*---------------------------------------------------------------------------
函数说明:CRC 高位字节值表
---------------------------------------------------------------------------*/
static unsigned char code auchCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40,