写卡程序,读的部分很成功,写的部分不成功,应该如何编程?
#include <reg52.h> //包含头文件#define uchar unsigned char //宏定义
#define uint unsigned int //宏定义
#define LCD_data P0 //数据口
sbit int0=P3^0; //串口读入
sbit int1=P3^1; //串口写出
sbit dxzk=P1^4; //串口读/写转换开关
sbit LCD_RS = P1^0; //数据/地址寄存器选择输入
sbit LCD_RW = P1^1; //液晶读/写控制
sbit LCD_EN = P1^2; //液晶使能控制
sbit LCD_PSB = P2^7; //串/并方式控制
sbit LCD_RST = P2^6; // lcd复位端
char a[13]; //字符数组a,ID卡的十六进制卡号,a[13]为系统自动增设的终结符(\0)
char b[13]; //字符数组b,要写入ID卡的十六进制卡号
。
。
。
。
void main()
{
init(); //调用初始化子函数
while(1)
{
if(flag==1)
{ //读取卡号
flag=0; //清除flag标志位
ES=0; //关串口中断
lcd_wcmd(0x01); //清除LCD的显示内容
delay(5);
if(dxzk=='1') //若串口读/写转换开关为高电平(向卡读卡号)
{
i=0; // i清零
lcd_pos(0,0); //设置显示位置为第一行的第1个字符
while(a[i]!= '\0')
{
lcd_wdat(a[i]); //逐个元素写卡号到显示屏
i++ ;
}
}
else //若串口读/写转换开关为低电平 (向卡写卡号 )
{
for ( i = 0; i < 13; i++) //将数组b[]的逐个元素写入ID卡中(即曼彻斯特内码)
{
SBUF=b[i];
while(!TI);
TI=0;
}
// 将新写的卡号显示在显示屏上
i=0; // i清零
lcd_pos(1,0); //设置显示位置为第二行的第1个字符
while(b[i]!= '\0')
{
lcd_wdat(b[i]); //逐个元素写卡号到显示屏
i++ ;
}
}
}
}
}
void ser() interrupt 4 //串口中断程序
{
ES=0; //关串口中断
RI=0; //清零串口接收标志位
for ( i = 0; i < 13; i++) //在c语言中,数组是不能整体赋值的,即a[13]=SBUF是错误的,必须是逐个元素赋值才行
//读取卡号
{
a[i] = SBUF;
while(!RI);
RI=0;
}
flag=1;
ES=1; //开串口中断
}