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

📄 pcf8563_test.lis

📁 pcf8563开发
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -