📄 pcf8563_test.lis
字号:
.module pcf8563_test.c
.area text(rom, con, rel)
0000 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\pcf8563_test.c
0000 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\delay.h
0000 .dbfunc e delay_1us _delay_1us fV
.even
0000 _delay_1us::
0000 .dbline -1
0000 .dbline 6
0000 ; /**********延时函数*****************/
0000 ; /*-----------------------------------------------
0000 ; delay_us :1us延时函数
0000 ; ------------------------------------------------*/
0000 ; void delay_1us(void)
0000 ; {
0000 .dbline 7
0000 ; asm("nop");
0000 0000 nop
0002 .dbline -2
0002 L1:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
0004 .dbfunc e delay_us _delay_us fV
0004 ; t -> R20,R21
.even
0004 _delay_us::
0004 4A93 st -y,R20
0006 5A93 st -y,R21
0008 A801 movw R20,R16
000A .dbline -1
000A .dbline 14
000A ; }
000A ; /*-----------------------------------------------
000A ; delay_nus :长延时函数
000A ; 输入参数: t :延时时间 us
000A ; ------------------------------------------------*/
000A ; void delay_us(unsigned int t)
000A ; {
000A 01C0 xjmp L4
000C L3:
000C .dbline 16
000C ; while(t--)
000C ; delay_1us();
000C F9DF xcall _delay_1us
000E L4:
000E .dbline 15
000E 1A01 movw R2,R20
0010 4150 subi R20,1
0012 5040 sbci R21,0
0014 2220 tst R2
0016 D1F7 brne L3
0018 3320 tst R3
001A C1F7 brne L3
001C X0:
001C .dbline -2
001C L2:
001C .dbline 0 ; func end
001C 5991 ld R21,y+
001E 4991 ld R20,y+
0020 0895 ret
0022 .dbsym r t 20 i
0022 .dbend
0022 .dbfunc e delay_1ms _delay_1ms fV
0022 ; i -> R16,R17
.even
0022 _delay_1ms::
0022 .dbline -1
0022 .dbline 22
0022 ; }
0022 ; /*----------------------------------------------
0022 ; delay_ms :1ms延时函数
0022 ; -----------------------------------------------*/
0022 ; void delay_1ms(void)
0022 ; {
0022 .dbline 24
0022 ; unsigned int i;
0022 ; for(i=0;i<1140;i++);
0022 0027 clr R16
0024 1127 clr R17
0026 02C0 xjmp L10
0028 L7:
0028 .dbline 24
0028 L8:
0028 .dbline 24
0028 0F5F subi R16,255 ; offset = 1
002A 1F4F sbci R17,255
002C L10:
002C .dbline 24
002C 0437 cpi R16,116
002E E4E0 ldi R30,4
0030 1E07 cpc R17,R30
0032 D0F3 brlo L7
0034 X1:
0034 .dbline -2
0034 L6:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 16 i
0036 .dbend
0036 .dbfunc e delay_ms _delay_ms fV
0036 ; t -> R20,R21
.even
0036 _delay_ms::
0036 4A93 st -y,R20
0038 5A93 st -y,R21
003A A801 movw R20,R16
003C .dbline -1
003C .dbline 31
003C ; }
003C ; /*----------------------------------------------
003C ; delay_nms :长延时函数
003C ; 输入参数: t :延时时间 ms
003C ; -----------------------------------------------*/
003C ; void delay_ms(unsigned int t)
003C ; {
003C 01C0 xjmp L13
003E L12:
003E .dbline 33
003E ; while(t--)
003E ; delay_1ms();
003E F1DF xcall _delay_1ms
0040 L13:
0040 .dbline 32
0040 1A01 movw R2,R20
0042 4150 subi R20,1
0044 5040 sbci R21,0
0046 2220 tst R2
0048 D1F7 brne L12
004A 3320 tst R3
004C C1F7 brne L12
004E X2:
004E .dbline -2
004E L11:
004E .dbline 0 ; func end
004E 5991 ld R21,y+
0050 4991 ld R20,y+
0052 0895 ret
0054 .dbsym r t 20 i
0054 .dbend
0054 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\twi.h
0054 .dbfunc e Twi_Init _Twi_Init fV
.even
0054 _Twi_Init::
0054 .dbline -1
0054 .dbline 49
0054 ; /*******************************************
0054 ; * I2C(TWI)操作函数 *
0054 ; * 文 件 名:TWI.h *
0054 ; * 函数功能:利用CPU的硬件TWI接口操作 *
0054 ; * 设 计:张子凤 *
0054 ; * 修改日期:2008年11月11日 *
0054 ; * 版 本:V1.0 *
0054 ; * 主控芯片:Mega16 *
0054 ; *******************************************/
0054 ; //宏定义
0054 ; //状态寄存器TWSR各种状态定义
0054 ; //主模式启动状态
0054 ; #define START 0x08 //启动总线
0054 ; #define RESTART 0x10 //重新启动总线
0054 ;
0054 ; //主发送模式各种状态
0054 ; #define MT_SLA_ACK 0x18 //SLA_W写地址已发送,收到应答位
0054 ; #define MT_SLA_NACK 0x20 //SLA_W写地址已发送,收到非应答位
0054 ; #define MT_DATA_ACK 0x28 //写入数据已发送,收到应答位
0054 ; #define MT_DATA_NACK 0x30 //写入数据已发送,收到应答位
0054 ; #define MT_ARB_LOST 0x38 //SLA_W或数据仲裁失败
0054 ;
0054 ; //主接收模式各种状态
0054 ; #define MR_ARB_LOST 0x38 //
0054 ; #define MR_SLA_ACK 0x40 //SLA_R已发送,收到应答位
0054 ; #define MR_SLA_NACK 0x48 //SLA_R已发送,收到非应答位
0054 ; #define MR_DATA_ACK 0x50 //接收到数据,应答位已返回
0054 ; #define MR_DATA_NACK 0x58 //接收到数据,非应答位已返回
0054 ;
0054 ; #define PCF8563_SLA_W 0xA2 //PCF8563写从地址
0054 ; #define PCF8563_SLA_R 0xA3 //PCF8563读从地址
0054 ;
0054 ; #define start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
0054 ; #define stop() (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
0054 ; #define waitack() {while(!(TWCR&(1<<TWINT)));}
0054 ; #define chkack() (TWSR&0xf8) //check ack
0054 ; #define sendack() (TWCR|=(1<<TWEA))
0054 ; #define sendnack() (TWCR&=~(1<<TWEA))
0054 ; #define sendbyte(x) {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);}
0054 ; #define rcvnckbyte()(TWCR=(1<<TWINT)|(1<<TWEN))
0054 ; #define rcvackbyte()(TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA))
0054 ;
0054 ; /* I2C Config */
0054 ; #define I2C_ERR 0
0054 ; #define I2C_CRR 1
0054 ;
0054 ; //TWI初始化
0054 ; void Twi_Init(void)
0054 ; {
0054 .dbline 50
0054 ; TWBR=14;
0054 8EE0 ldi R24,14
0056 80B9 out 0x0,R24
0058 .dbline 51
0058 ; TWSR=0;
0058 2224 clr R2
005A 21B8 out 0x1,R2
005C .dbline -2
005C L15:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbend
005E .dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\lcd1602.h
005E .dbfunc e LCD_init _LCD_init fV
.even
005E _LCD_init::
005E .dbline -1
005E .dbline 34
005E ; /*-------------------------------------------
005E ; RS----------PC2
005E ; RW----------GND
005E ; EN----------PC3
005E ; D4-D7-------PC4-PC7
005E ; ---------------------------------------------*/
005E ; //定义MCU与LCD的接口
005E ; #define LCD_EN_PORT PORTC
005E ; #define LCD_EN_DDR DDRC
005E ; #define LCD_RS_PORT PORTC
005E ; #define LCD_RS_DDR DDRC
005E ; #define LCD_DATA_PORT PORTC
005E ; #define LCD_DATA_DDR DDRC
005E ; #define LCD_DATA_PIN PINC
005E ; #define LCD_EN 0x08 //portc3 out
005E ; #define LCD_RS 0x04 //portc2 out
005E ; #define LCD_DATA 0xf0 //portc4/5/6/7 out
005E ;
005E ; /*----------------------------------------------------------
005E ; Public function prototypes
005E ; ----------------------------------------------------------*/
005E ; void LCD_init(void);
005E ; void LCD_en_write(void);
005E ; void clear(void);
005E ; void LCD_write_char(unsigned command,unsigned data);
005E ; void LCD_set_xy(unsigned char x, unsigned char y);
005E ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
005E ; void LCD_write_data(unsigned char X,unsigned char Y,int dat);
005E ;
005E ; /*------------------------------------------------------------
005E ; 函数: lcd1602口线初始化和液晶初始化
005E ; -------------------------------------------------------------*/
005E ; void LCD_init(void) //液晶初始化
005E ; {
005E .dbline 35
005E ; LCD_DATA_DDR|=LCD_DATA;
005E 84B3 in R24,0x14
0060 806F ori R24,240
0062 84BB out 0x14,R24
0064 .dbline 36
0064 ; LCD_EN_DDR|=LCD_EN;
0064 A39A sbi 0x14,3
0066 .dbline 37
0066 ; LCD_RS_DDR|=LCD_RS;
0066 A29A sbi 0x14,2
0068 .dbline 38
0068 ; delay_ms(15);
0068 0FE0 ldi R16,15
006A 10E0 ldi R17,0
006C E4DF xcall _delay_ms
006E .dbline 39
006E ; LCD_write_char(0x28,0); //4位显示
006E 2227 clr R18
0070 3327 clr R19
0072 08E2 ldi R16,40
0074 10E0 ldi R17,0
0076 2AD0 xcall _LCD_write_char
0078 .dbline 40
0078 ; delay_ms(15);
0078 0FE0 ldi R16,15
007A 10E0 ldi R17,0
007C DCDF xcall _delay_ms
007E .dbline 41
007E ; LCD_write_char(0x0c,0); //显示开
007E 2227 clr R18
0080 3327 clr R19
0082 0CE0 ldi R16,12
0084 10E0 ldi R17,0
0086 22D0 xcall _LCD_write_char
0088 .dbline 42
0088 ; delay_ms(15);
0088 0FE0 ldi R16,15
008A 10E0 ldi R17,0
008C D4DF xcall _delay_ms
008E .dbline 43
008E ; LCD_write_char(0x01,0); //清屏
008E 2227 clr R18
0090 3327 clr R19
0092 01E0 ldi R16,1
0094 10E0 ldi R17,0
0096 1AD0 xcall _LCD_write_char
0098 .dbline 44
0098 ; clear();
0098 6AD0 xcall _clear
009A .dbline -2
009A L16:
009A .dbline 0 ; func end
009A 0895 ret
009C .dbend
009C .dbfunc e LCD_set_xy _LCD_set_xy fV
009C ; address -> R20
009C ; y -> R10
009C ; x -> R22
.even
009C _LCD_set_xy::
009C 0E940000 xcall push_xgsetF00C
00A0 A22E mov R10,R18
00A2 602F mov R22,R16
00A4 .dbline -1
00A4 .dbline 53
00A4 ; }
00A4 ;
00A4 ; /*------------------------------------------------------------
00A4 ; 函数: 设置显示地址
00A4 ; para: x---the display address of a line limit: 0---15
00A4 ; y---the display line limit 0 or 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -