⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iouart.c

📁 这是机场入口电子卡检查登记的设备。有输入
💻 C
字号:
#include"w77e58.h"
/**************************************************
      //串口2队列
**************************************************/
extern unsigned char xdata xBuf_2[];//384
unsigned char xdata *Seri2_ReadPoint;
unsigned char xdata *Seri2_WritePoint;
unsigned int data Seri2_SendNum; 
unsigned int data Seri2_ReciNum; 
sbit BT_SND =P2^6;
sbit BT_REC =P2^7;
/**********************************************

IO 口模拟232通讯程序

占用定时器0

**********************************************/

#define F_TM F0
#define TIMER0_ENABLE  TL0=TH0; TR0=1;
#define TIMER0_DISABLE TR0=0;

sbit ACC0=   ACC^0;
sbit ACC1=   ACC^1;
sbit ACC2=   ACC^2;
sbit ACC3=   ACC^3;
sbit ACC4=   ACC^4;
sbit ACC5=   ACC^5;
sbit ACC6=   ACC^6;
sbit ACC7=   ACC^7;

void IntTimer0() interrupt 1
{
F_TM=1;
}
//发送一个字符
void PSendChar(unsigned char inch)
{
ACC=inch;

F_TM=0;
BT_SND=0; //start bit
TIMER0_ENABLE; //启动
while(!F_TM);

BT_SND=ACC0; //先送出低位
F_TM=0;
while(!F_TM);

BT_SND=ACC1;
F_TM=0;
while(!F_TM);

BT_SND=ACC2;
F_TM=0;
while(!F_TM);

BT_SND=ACC3;
F_TM=0;
while(!F_TM);

BT_SND=ACC4;
F_TM=0;
while(!F_TM);

BT_SND=ACC5;
F_TM=0;
while(!F_TM);

BT_SND=ACC6;
F_TM=0;
while(!F_TM);

BT_SND=ACC7;
F_TM=0;
while(!F_TM);

BT_SND=1;
F_TM=0;
while(!F_TM);

TIMER0_DISABLE; //停止timer
}
//接收一个字符
unsigned char PGetChar()
{
TIMER0_ENABLE;
F_TM=0;
while(!F_TM); //等过起始位
ACC0=BT_REC;

TL0=TH0;

F_TM=0;
while(!F_TM);
ACC1=BT_REC;

F_TM=0;
while(!F_TM);
ACC2=BT_REC;

F_TM=0;
while(!F_TM);
ACC3=BT_REC;

F_TM=0;
while(!F_TM);
ACC4=BT_REC;

F_TM=0;
while(!F_TM);
ACC5=BT_REC;

F_TM=0;
while(!F_TM);
ACC6=BT_REC;

F_TM=0;
while(!F_TM);
ACC7=BT_REC;

F_TM=0;

while(!F_TM)
{
  if(BT_REC){break;}
}
TIMER0_DISABLE; //停止timer
return ACC;
}
/*
//检查是不是有起始位
bit StartBitOn()
{
  return  (BT_REC==0);
}
*/
void puart_init(void) {
TMOD|=0x22; //定时器1为工作模式2(8位自动重装),0为模式2(8位自动重装) 
PCON=00;

TR0=0; //在发送或接收才开始使用
TF0=0;
TH0=(256-96); //9600bps 就是 1000000/9600=104.167微秒 执行的
//timer是         104.167*11.0592/12= 96
TL0=TH0;
ET0=1;
EA=1;
}
extern unsigned char tmp;
extern unsigned char Sla;
S2send() //串口2发送
{
 unsigned char m,n;
 unsigned char front[17]={0x01,0xd1,0x04,0x00,0x00,0x00,0x00,0x00,0x4f,0x00,0x0f,0x00,0x01,0x01,0x00,0x01,0x01};
  PSendChar(0x01);
  PSendChar(0x01);
BT_REC=1;
 for(m=0;m<200;m++)//等接受开始 
  for(n=0;n<200;n++){
    if(BT_REC==0) goto send;       
  }
return;

send:
tmp=PGetChar();       //接受
/*
  for(Seri2_SendNum=336;Seri2_SendNum>=17;Seri2_SendNum--)
     xBuf_2[Seri2_SendNum]=xBuf_2[Seri2_SendNum-17];
  for(Seri2_SendNum=0;Seri2_SendNum<17; Seri2_SendNum++)
     xBuf_2[Seri2_SendNum]=front[Seri2_SendNum];
  xBuf_2[337]=0xaa;
for(Seri2_SendNum=0;Seri2_SendNum<338; Seri2_SendNum++)
   PSendChar(xBuf_2[Seri2_SendNum]);
*/
 for(m=0; m<17; m++)
    PSendChar(front[m]);
 for(m=0;m<16;m++)
   for(n=m;n<16*10;n+=16)
      PSendChar(xBuf_2[n]);
 PSendChar(0xaa);
}
 /*
 for(Seri2_SendNum=0; Seri2_SendNum<17; Seri2_SendNum++)
   PSendChar(front[Seri2_SendNum]); 
   for(Seri2_ReciNum=0;Seri2_ReciNum<16;Seri2_ReciNum++)
    for(Seri2_SendNum=Seri2_ReciNum;Seri2_SendNum<16*10;Seri2_SendNum+16)
        {
        PSendChar(xBuf_2[Seri2_SendNum]);
        PSendChar(0xff);
        } 
        PSendChar(0xaa);
*/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -