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

📄 main.c

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 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 + -