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

📄 test.lst

📁 pcf8563开发
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
      2A E5CF      LDI	R28,0x5F
      2B E0D4      LDI	R29,4
      2C BFCD      OUT	0x3D,R28
      2D BFDE      OUT	0x3E,R29
      2E 51CE      SUBI	R28,0x1E
      2F 40D0      SBCI	R29,0
      30 EA0A      LDI	R16,0xAA
      31 8308      STD	Y+0,R16
      32 2400      CLR	R0
      33 E6E0      LDI	R30,0x60
      34 E0F0      LDI	R31,0
      35 E010      LDI	R17,0
      36 36E8      CPI	R30,0x68
      37 07F1      CPC	R31,R17
      38 F011      BEQ	0x003B
      39 9201      ST	R0,Z+
      3A CFFB      RJMP	0x0036
      3B 8300      STD	Z+0,R16
      3C E5E4      LDI	R30,0x54
      3D E0F0      LDI	R31,0
      3E E6A0      LDI	R26,0x60
      3F E0B0      LDI	R27,0
      40 E010      LDI	R17,0
      41 E000      LDI	R16,0
      42 BF0B      OUT	0x3B,R16
      43 35E4      CPI	R30,0x54
      44 07F1      CPC	R31,R17
      45 F021      BEQ	0x004A
      46 95C8      LPM
      47 9631      ADIW	R30,1
      48 920D      ST	R0,X+
      49 CFF9      RJMP	0x0043
      4A D274      RCALL	_main
_exit:
      4B CFFF      RJMP	_exit
FILE: D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\delay.h
(0001) /**********延时函数*****************/
(0002) /*-----------------------------------------------
(0003) delay_us	   :1us延时函数
(0004) ------------------------------------------------*/
(0005) void delay_1us(void)
(0006) {
(0007)  asm("nop");
_delay_1us:
      4C 0000      NOP
      4D 9508      RET
_delay_us:
  t                    --> R20
      4E 934A      ST	R20,-Y
      4F 935A      ST	R21,-Y
      50 01A8      MOVW	R20,R16
(0008) }
(0009) /*-----------------------------------------------
(0010) delay_nus          :长延时函数
(0011) 输入参数: t        :延时时间 us
(0012) ------------------------------------------------*/
(0013) void delay_us(unsigned int t)
(0014) {
      51 C001      RJMP	0x0053
(0015)  while(t--)
(0016)   delay_1us();
      52 DFF9      RCALL	_delay_1us
      53 011A      MOVW	R2,R20
      54 5041      SUBI	R20,1
      55 4050      SBCI	R21,0
      56 2022      TST	R2
      57 F7D1      BNE	0x0052
      58 2033      TST	R3
      59 F7C1      BNE	0x0052
      5A 9159      LD	R21,Y+
      5B 9149      LD	R20,Y+
      5C 9508      RET
(0017) }
(0018) /*----------------------------------------------
(0019) delay_ms	   :1ms延时函数
(0020) -----------------------------------------------*/
(0021) void delay_1ms(void)
(0022) {
(0023)  unsigned int i;
(0024)  for(i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
      5D 2700      CLR	R16
      5E 2711      CLR	R17
      5F C002      RJMP	0x0062
      60 5F0F      SUBI	R16,0xFF
      61 4F1F      SBCI	R17,0xFF
      62 3704      CPI	R16,0x74
      63 E0E4      LDI	R30,4
      64 071E      CPC	R17,R30
      65 F3D0      BCS	0x0060
      66 9508      RET
_delay_ms:
  t                    --> R20
      67 934A      ST	R20,-Y
      68 935A      ST	R21,-Y
      69 01A8      MOVW	R20,R16
(0025) }
(0026) /*----------------------------------------------
(0027) delay_nms          :长延时函数
(0028) 输入参数: t        :延时时间 ms
(0029) -----------------------------------------------*/
(0030) void delay_ms(unsigned int t)
(0031) {
      6A C001      RJMP	0x006C
(0032)  while(t--)
(0033)   delay_1ms();
      6B DFF1      RCALL	_delay_1ms
      6C 011A      MOVW	R2,R20
      6D 5041      SUBI	R20,1
      6E 4050      SBCI	R21,0
      6F 2022      TST	R2
      70 F7D1      BNE	0x006B
      71 2033      TST	R3
      72 F7C1      BNE	0x006B
      73 9159      LD	R21,Y+
      74 9149      LD	R20,Y+
      75 9508      RET
FILE: D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\twi.h
(0001) /*******************************************
(0002) *       I2C(TWI)操作函数		   *
(0003) *  文 件 名:TWI.h					   *
(0004) *  函数功能:利用CPU的硬件TWI接口操作	   *
(0005) *  设    计:张子凤					       *
(0006) *  修改日期:2008年11月11日				   *
(0007) *  版    本:V1.0						   *
(0008) *  主控芯片:Mega16						   *
(0009) *******************************************/
(0010) //宏定义
(0011) //状态寄存器TWSR各种状态定义
(0012) //主模式启动状态
(0013) #define START			0x08		//启动总线
(0014) #define RESTART			0x10		//重新启动总线
(0015) 
(0016) //主发送模式各种状态
(0017) #define MT_SLA_ACK		0x18		//SLA_W写地址已发送,收到应答位
(0018) #define MT_SLA_NACK		0x20		//SLA_W写地址已发送,收到非应答位
(0019) #define MT_DATA_ACK		0x28		//写入数据已发送,收到应答位
(0020) #define MT_DATA_NACK	0x30		//写入数据已发送,收到应答位
(0021) #define MT_ARB_LOST		0x38		//SLA_W或数据仲裁失败
(0022) 
(0023) //主接收模式各种状态
(0024) #define MR_ARB_LOST		0x38		//
(0025) #define MR_SLA_ACK		0x40		//SLA_R已发送,收到应答位
(0026) #define MR_SLA_NACK		0x48		//SLA_R已发送,收到非应答位
(0027) #define MR_DATA_ACK		0x50		//接收到数据,应答位已返回
(0028) #define MR_DATA_NACK	0x58		//接收到数据,非应答位已返回
(0029) 
(0030) #define PCF8563_SLA_W	0xA2	   		 //PCF8563写从地址
(0031) #define PCF8563_SLA_R	0xA3			 //PCF8563读从地址
(0032) 
(0033) #define start()    	(TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
(0034) #define stop()     	(TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
(0035) #define waitack()	{while(!(TWCR&(1<<TWINT)));}
(0036) #define chkack() 	(TWSR&0xf8)					//check ack
(0037) #define sendack()	(TWCR|=(1<<TWEA))
(0038) #define sendnack()	(TWCR&=~(1<<TWEA))
(0039) #define sendbyte(x)	{TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);} 
(0040) #define rcvnckbyte()(TWCR=(1<<TWINT)|(1<<TWEN))
(0041) #define rcvackbyte()(TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA))
(0042) 
(0043) /* I2C Config */
(0044) #define I2C_ERR			0
(0045) #define I2C_CRR			1
(0046) 
(0047) //TWI初始化
(0048) void Twi_Init(void)
(0049) {
(0050)  TWBR=14;
_Twi_Init:
      76 E08E      LDI	R24,0xE
      77 B980      OUT	0x00,R24
(0051)  TWSR=0;
      78 2422      CLR	R2
      79 B821      OUT	0x01,R2
      7A 9508      RET
FILE: D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\lcd1602.h
(0001) /*-------------------------------------------
(0002)    RS----------PC2
(0003)    RW----------GND
(0004)    EN----------PC3
(0005)    D4-D7-------PC4-PC7
(0006) ---------------------------------------------*/
(0007) //定义MCU与LCD的接口 
(0008) #define LCD_EN_PORT   PORTC
(0009) #define LCD_EN_DDR    DDRC
(0010) #define LCD_RS_PORT   PORTC
(0011) #define LCD_RS_DDR    DDRC
(0012) #define LCD_DATA_PORT PORTC
(0013) #define LCD_DATA_DDR  DDRC
(0014) #define LCD_DATA_PIN  PINC
(0015) #define LCD_EN        0x08   //portc3 out
(0016) #define LCD_RS        0x04   //portc2 out
(0017) #define LCD_DATA      0xf0 //portc4/5/6/7 out
(0018) 
(0019) /*----------------------------------------------------------
(0020) Public function prototypes
(0021) ----------------------------------------------------------*/
(0022) void LCD_init(void);
(0023) void LCD_en_write(void);
(0024) void clear(void);
(0025) void LCD_write_char(unsigned command,unsigned data);
(0026) void LCD_set_xy(unsigned char x, unsigned char y);
(0027) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
(0028) void LCD_write_data(unsigned char X,unsigned char Y,int dat);
(0029) 
(0030) /*------------------------------------------------------------
(0031) 函数: lcd1602口线初始化和液晶初始化
(0032) -------------------------------------------------------------*/
(0033) void LCD_init(void) //液晶初始化
(0034) {
(0035)  LCD_DATA_DDR|=LCD_DATA;
_LCD_init:
      7B B384      IN	R24,0x14
      7C 6F80      ORI	R24,0xF0
      7D BB84      OUT	0x14,R24
(0036)  LCD_EN_DDR|=LCD_EN;
      7E 9AA3      SBI	0x14,3
(0037)  LCD_RS_DDR|=LCD_RS;
      7F 9AA2      SBI	0x14,2
(0038)  delay_ms(15);
      80 E00F      LDI	R16,0xF
      81 E010      LDI	R17,0
      82 DFE4      RCALL	_delay_ms
(0039)  LCD_write_char(0x28,0); //4位显示
      83 2722      CLR	R18
      84 2733      CLR	R19
      85 E208      LDI	R16,0x28
      86 E010      LDI	R17,0
      87 D028      RCALL	_LCD_write_char
(0040)  delay_ms(15);
      88 E00F      LDI	R16,0xF
      89 E010      LDI	R17,0
      8A DFDC      RCALL	_delay_ms
(0041)  LCD_write_char(0x0c,0); //显示开
      8B 2722      CLR	R18
      8C 2733      CLR	R19
      8D E00C      LDI	R16,0xC
      8E E010      LDI	R17,0
      8F D020      RCALL	_LCD_write_char
(0042)  delay_ms(15);
      90 E00F      LDI	R16,0xF
      91 E010      LDI	R17,0
      92 DFD4      RCALL	_delay_ms
(0043)  LCD_write_char(0x01,0); //清屏
      93 2722      CLR	R18
      94 2733      CLR	R19
      95 E001      LDI	R16,1
      96 E010      LDI	R17,0
      97 D018      RCALL	_LCD_write_char
(0044)  clear();
      98 D052      RCALL	_clear
      99 9508      RET
_LCD_set_xy:
  address              --> R20
  y                    --> R10
  x                    --> R22
      9A D27E      RCALL	push_xgsetF00C
      9B 2EA2      MOV	R10,R18
      9C 2F60      MOV	R22,R16
(0045) }
(0046) 
(0047) /*------------------------------------------------------------
(0048) 函数: 设置显示地址
(0049) para: x---the display address of a line limit: 0---15
(0050)       y---the display line limit 0 or 1 
(0051) --------------------------------------------------------------*/
(0052) void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
(0053) {
(0054)   unsigned char address;
(0055)   if(y ==0) 
      9D 20AA      TST	R10
      9E F419      BNE	0x00A2
(0056)    address=0x80+x; //the first line
      9F 2F46      MOV	R20,R22
      A0 5840      SUBI	R20,0x80
      A1 C002      RJMP	0x00A4
(0057)   else 
(0058)    address=0xc0+x; //the second line
      A2 2F46      MOV	R20,R22
      A3 5440      SUBI	R20,0x40
(0059)   LCD_write_char(address,0);
      A4 2722      CLR	R18
      A5 2733      CLR	R19
      A6 2F04      MOV	R16,R20
      A7 2711      CLR	R17
      A8 D007      RCALL	_LCD_write_char
      A9 C274      RJMP	pop_xgsetF00C
(0060) }
(0061) /*-------------------------------------------------------------
(0062) 函数: lcd1602使能
(0063) *--------------------------------------------------------------*/
(0064) void LCD_en_write(void) //液晶使能
(0065) { 
(0066)  LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
      AA 9AAB      SBI	0x15,3
(0067)  delay_us(5);
      AB E005      LDI	R16,5
      AC E010      LDI	R17,0
      AD DFA0      RCALL	_delay_us
(0068)  LCD_EN_PORT&=~LCD_EN;
      AE 98AB      CBI	0x15,3
      AF 9508      RET
_LCD_write_char:
  data_temp            --> R22
  command_temp         --> R20
  data                 --> R12
  command              --> R10
      B0 D280      RCALL	push_xgsetF03C
      B1 0169      MOVW	R12,R18
      B2 0158      MOVW	R10,R16
(0069) }
(0070) /*------------------------------------------------------------
(0071) 函数: 写命令或数据到lcd1602
(0072) 参数:command: 0---写数据, 1---写命令
(0073)       data: 所要写的命令或数据
(0074) *-------------------------------------------------------------*/
(0075) void LCD_write_char(unsigned command,unsigned data) 
(0076) {
(0077)  unsigned command_temp,data_temp;
(0078)  command_temp=command;
      B3 01A5      MOVW	R20,R10
(0079)  data_temp=data;
      B4 01B6      MOVW	R22,R12
(0080)  delay_us(25);
      B5 E109      LDI	R16,0x19
      B6 E010      LDI	R17,0
      B7 DF96      RCALL	_delay_us
(0081)  if(command==0)
      B8 3040      CPI	R20,0
      B9 0745      CPC	R20,R21
      BA F4C1      BNE	0x00D3
(0082)  {
(0083)   LCD_RS_PORT|=LCD_RS; //RS=1
      BB 9AAA      SBI	0x15,2
(0084)   LCD_DATA_PORT&=0X0f;
      BC B385      IN	R24,0x15
      BD 708F      ANDI	R24,0xF
      BE BB85      OUT	0x15,R24
(0085)   LCD_DATA_PORT|=data_temp&0xf0; //写高四位
      BF 01CB      MOVW	R24,R22
      C0 940E 0359 CALL	0x0359
(0086)   LCD_en_write();
      C2 DFE7      RCALL	_LCD_en_write
(0087)   data_temp=data_temp<<4; 
      C3 0F66      LSL	R22
      C4 1F77      ROL	R23
      C5 0F66      LSL	R22
      C6 1F77      ROL	R23
      C7 0F66      LSL	R22
      C8 1F77      ROL	R23
      C9 0F66      LSL	R22
      CA 1F77      ROL	R23
(0088)   LCD_DATA_PORT&=0X0f;
      CB B385      IN	R24,0x15
      CC 708F      ANDI	R24,0xF
      CD BB85      OUT	0x15,R24
(0089)   LCD_DATA_PORT|=data_temp&0xf0; //写低四位
      CE 01CB      MOVW	R24,R22
      CF 940E 0359 CALL	0x0359
(0090)   LCD_en_write();
      D1 DFD8      RCALL	_LCD_en_write
(0091)  }
      D2 C017      RJMP	0x00EA
(0092)  else
(0093)  {
(0094)   LCD_RS_PORT&=~LCD_RS; //RS=0
      D3 98AA      CBI	0x15,2
(0095)   LCD_DATA_PORT&=0X0f;
      D4 B385      IN	R24,0x15
      D5 708F      ANDI	R24,0xF
      D6 BB85      OUT	0x15,R24
(0096)   LCD_DATA_PORT|=command_temp&0xf0; //写高四位
      D7 01CA      MOVW	R24,R20
      D8 940E 0359 CALL	0x0359
(0097)   LCD_en_write();
      DA DFCF      RCALL	_LCD_en_write
(0098)   command_temp=command_temp<<4;
      DB 0F44      LSL	R20
      DC 1F55      ROL	R21
      DD 0F44      LSL	R20
      DE 1F55      ROL	R21
      DF 0F44      LSL	R20
      E0 1F55      ROL	R21
      E1 0F44      LSL	R20
      E2 1F55      ROL	R21
(0099)   LCD_DATA_PORT&=0x0f;
      E3 B385      IN	R24,0x15
      E4 708F      ANDI	R24,0xF
      E5 BB85      OUT	0x15,R24
(0100)   LCD_DATA_PORT|=command_temp&0xf0; //写低四位
      E6 01CA      MOVW	R24,R20
      E7 940E 0359 CALL	0x0359
(0101)   LCD_en_write();
      E9 DFC0      RCALL	_LCD_en_write
(0102)  }
      EA C24D      RJMP	pop_xgsetF03C
_clear:
  i                    --> R20
      EB 934A      ST	R20,-Y
(0103) }
(0104) /*-------------------------------------------------------------
(0105) 函数: 清屏lcd1602
(0106) ---------------------------------------------------------------*/
(0107) void clear(void)
(0108) {
(0109)  unsigned char i;
(0110)  LCD_set_xy(0,0);
      EC 2722      CLR	R18
      ED 2700      CLR	R16
      EE DFAB      RCALL	_LCD_set_xy
(0111)  for(i=0;i<16;i++)
      EF 2744      CLR	R20
      F0 C004      RJMP	0x00F5
(0112)  LCD_write_char(0,' ');
      F1 940E 0366 CALL	0x0366
      F3 DFBC      RCALL	_LCD_write_char
      F4 9543      INC	R20
      F5 3140      CPI	R20,0x10
      F6 F3D0      BCS	0x00F1
(0113)  LCD_set_xy(0,1);
      F7 E021      LDI	R18,1
      F8 2700      CLR	R16
      F9 DFA0      RCALL	_LCD_set_xy
(0114)  for(i=0;i<16;i++)
      FA 2744      CLR	R20
      FB C004      RJMP	0x0100
(0115)  LCD_write_char(0,' ');
      FC 940E 0366 CALL	0x0366
      FE DFB1      RCALL	_LCD_write_char

⌨️ 快捷键说明

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