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

📄 t7281a.lst

📁 HD7279
💻 LST
字号:
C51 COMPILER V6.12  T7281A                                                                 05/31/2004 11:18:28 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE T7281A
OBJECT MODULE PLACED IN .\T7281A.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\T7281A.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          
   3          //*** 函数定义 ***
   4          void delay(unsigned char);				// 短暂延时
   5          void write728x(unsigned char, unsigned char);	// 写入到BC728x
   6          unsigned char read728x(unsigned char);		// 从BC728x读出
   7          void send_byte(unsigned char);			// 发送一个字节
   8          unsigned char receive_byte(void);			// 接收一个字节
   9          
  10          //*** 变量及I/O口定义 ***
  11          unsigned char key_number;
  12          unsigned int tmr;
  13          sbit clk=P3^5;		// clk 连接于 P3.5
  14          sbit dat=P3^7;		// dat 连接于 P3.7
  15          sbit key=P3^3;		// key 连接于 P3.3(INT1)
  16          
  17          //*** 主程序 ***
  18          main()
  19          {
  20   1      	for (tmr=0;tmr<0xffff;tmr++);	// 等待 BC728x 完成复位
  21   1      	write728x(0x12,0x80);	// 初始化BC728x为164模式,不反相
  22   1      	while (1)
  23   1      	{
  24   2      		while(key);			// 等待按键
  25   2      		key_number=read728x(0x13);	// 读键值	
  26   2      		write728x(0x15,0x10+(key_number&0xf0)/16);
  27   2      			// 在第1位上以HEX译码方式显示键码的高4位
  28   2      		write728x(0x15,key_number&0x0f);
  29   2      			// 在第0位上以HEX译码方式显示键码的低4位
  30   2      	}
  31   1      }
  32          
  33          // ***********************************************************
  34          // * 写入BC728X, 第一个参数为目标寄存器地址, 第二个参数为要写入的数据 *
  35          // ***********************************************************
  36          void write728x(unsigned char reg_add, unsigned char write_data)
  37          {
  38   1      	send_byte(reg_add);		// 发送寄存器地址
  39   1      	send_byte(write_data);	// 发送数据字节
  40   1      }
  41          
  42          // **********************************************************
  43          // *      读出 BC728X 内部寄存器的值, 调用参数为寄存器地址        *
  44          // **********************************************************
  45          unsigned char read728x(unsigned char reg_add)
  46          {
  47   1      	send_byte(reg_add|0x80);	// 发送读指令(bit7=1)
  48   1      	return(receive_byte());	// 接收数据字节并返回
  49   1      }
  50          
  51          // ***********************************************************
  52          // *                向 BC728X 发送一个字节                     *
  53          // ***********************************************************
  54          void send_byte(unsigned char send_byte)
  55          {
C51 COMPILER V6.12  T7281A                                                                 05/31/2004 11:18:28 PAGE 2   

  56   1      	unsigned char bit_counter;
  57   1      	clk=0;			// 产生一 clk 脉冲
  58   1      	clk=1;
  59   1      	while (dat);		// 等待 BC728X 输出 dat 低电平响应
  60   1      	clk=0;			// 再次输出一 clk 脉冲
  61   1      	clk=1;
  62   1      	while (!dat);		// 等待 BC728X 进入接收状态
  63   1      	for (bit_counter=0;bit_counter<8;bit_counter++)
  64   1      	{			// 发送 8 个比特
  65   2      		if ((send_byte&0x80)==0)
  66   2       		{
  67   3        			dat=0;// 如果待发bit为0, 置 dat 为 0
  68   3        	 	}
  69   2        	 	else
  70   2        	 	{
  71   3        	 		dat=1;		// 反之置为 1
  72   3        	  	}
  73   2       		send_byte=send_byte*2;	// send_byte 左移一位
  74   2      		clk=0;			// 输出一 clk 脉冲
  75   2      		clk=1;
  76   2      		delay(1);		// 短暂延时
  77   2      	}
  78   1      	dat=1;				// 恢复 dat 为高电平
  79   1      }
  80          
  81          // ************************************************************
  82          // *                 从 BC728X 接收一个字节                     *
  83          // ************************************************************
  84          unsigned char receive_byte(void)
  85          {
  86   1      	unsigned char bit_counter, in_byte;
  87   1      	clk=0;			// 发出一 clk 脉冲
  88   1      	clk=1;
  89   1      	while (dat);		// 等待 BC728X 响应
  90   1      	clk=0;		// 收到响应, 再发一脉冲等待接收数据
  91   1      	clk=1;
  92   1      	for (bit_counter=0;bit_counter<8;bit_counter++)
  93   1      	{			// 接收8个bit
  94   2      		delay(1);	// 短暂延时
  95   2      		in_byte=in_byte*2;	// in_byte 左移一位
  96   2      		if (dat)	// 如果 dat 为'1'
  97   2      		{
  98   3      			in_byte=in_byte|0x01;	// bit0=1
  99   3      		}
 100   2      		clk=0;		// 输出一 clk 脉冲
 101   2      		clk=1;
 102   2      	}
 103   1      	return(in_byte);
 104   1      }
 105          
 106          // ***********************************************************
 107          // *  短暂延时程序, 延时时间与参数time成正比, 范围是几个uS到几百个uS *
 108          // ***********************************************************
 109          void delay(unsigned char time)
 110          {
 111   1      	while (time!=0)
 112   1      	{
 113   2      		time--;
 114   2      	}
 115   1      }


C51 COMPILER V6.12  T7281A                                                                 05/31/2004 11:18:28 PAGE 3   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    198    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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