📄 main.c
字号:
#include <absacc.h>
#include <intrins.h>
#include <./Atmel/at89x51.h>
//定义常量
#define PrintStart 0x30
#define PrintLen 0x10
#define para8255Port_Mode 0
#define para8255Port_A 1
#define para8255Port_B 2
#define para8255Port_C 3
#define para8255reg_Mode XBYTE[0x7FFF]
#define para8255reg_PA XBYTE[0x7FFC]
#define para8255reg_PB XBYTE[0x7FFD]
#define para8255reg_PC XBYTE[0x7FFE]
//定义变量
sfr para8255_Bus=0x80;
unsigned char data *Print_ptr;
bit print_on;
bit RW_8255;
unsigned char g_FirstByteAddr;
unsigned char g_ByteNum;
unsigned char g_ReadRegFor8255;
unsigned char g_WriteRegFor8255;
unsigned char CMD_8255;
unsigned char PortX_8255;
unsigned char ByteToBus;
//函数声明
void Print_fstByte(g_FirstByteAddr,g_ByteNum);
void Print_aByte(void);
void RdWt_8255(RW_8255,PortX_8255,ByteToBus);
/*******************************************************
功能:主函数
描述:初始化、启动打印、进入空闲等待模式
参数:无
返回:无
********************************************************/
main()
{
P1=0x00;
P2=0x00;
P3=0xFF;
IE=0x80;
print_on=0;
g_FirstByteAddr = 0x30;
g_ByteNum = 0x00;
RdWt_8255(1,0,0xA4);//初始化8255
while(1)
{
//此处添加其它程序,例如接收或等待打印命令;
//确认打印,则print_on=1;
if (print_on)
{
EX1 = 1;
Print_fstByte(PrintStart,PrintLen);
};//end of if (print_on)
};//end of while(1)
}
/*******************************************************
功能:RW_8255
描述:读写8255
参数:RW_8255:1表示写8255,0表示读8255
PortX_8255:指示8255工作端口
ByteToBus:要写的数据
返回:如果RW_8255参数为0,则返回读结果g_ReadRegFor8255
********************************************************/
void RdWt_8255(RW_8255,PortX_8255,ByteToBus)
{
if(RW_8255)
{
switch(PortX_8255){
case para8255Port_Mode:
para8255reg_Mode = ByteToBus;
break;
case para8255Port_A:
para8255reg_PA = ByteToBus;
break;
case para8255Port_B:
para8255reg_PB = ByteToBus;
break;
case para8255Port_C:
para8255reg_PC = ByteToBus;
break;
default:
para8255reg_PA = 0x00;
para8255reg_PB = 0x00;
para8255reg_PC = 0x00;
break;
};//end of switch(PortX_8255)
}
else
{
switch(PortX_8255){
case para8255Port_Mode:
g_ReadRegFor8255 = para8255reg_Mode;
break;
case para8255Port_A:
g_ReadRegFor8255 = para8255reg_PA;
break;
case para8255Port_B:
g_ReadRegFor8255 = para8255reg_PB;
break;
case para8255Port_C:
g_ReadRegFor8255 = para8255reg_PC;
break;
default:
g_ReadRegFor8255 = 0x00;
break;
};//end of switch(PortX_8255)
};//end of if(RW_8255)
}//end of this function
/*******************************************************
功能:Print_fstByte
描述:打印第一个字节
参数:g_FirstByteAddr,g_ByteNum
返回:无
********************************************************/
void Print_fstByte(g_FirstByteAddr,g_ByteNum)
{
Print_ptr = g_FirstByteAddr;
RdWt_8255(1,1,*Print_ptr);
Print_ptr++;
g_FirstByteAddr = *Print_ptr;
RdWt_8255(1,1,0x0E);
_nop_();
RdWt_8255(1,1,0x0F);
_nop_();
g_ByteNum--;
}//end of this function
/*******************************************************
功能:Print_aByte
描述:通过中断打印一个字节
参数:无
返回:无
********************************************************/
void Print_aByte(void)interrupt 2
{
if(g_ByteNum!=0)
{
Print_ptr = g_FirstByteAddr;
RdWt_8255(1,1,*Print_ptr);
Print_ptr++;
g_FirstByteAddr = *Print_ptr;
RdWt_8255(1,1,0x0E);
_nop_();
RdWt_8255(1,1,0x0F);
_nop_();
g_ByteNum--;
}
else
{
print_on = 0;
EX1 = 0;
};
}//end of this function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -