📄 pcf8563_test.lis
字号:
01BC ; while(*s)
01BC ; {
01BC .dbline 127
01BC ; LCD_write_char(0,*s);
01BC FA01 movw R30,R20
01BE 2081 ldd R18,z+0
01C0 3327 clr R19
01C2 0027 clr R16
01C4 1127 clr R17
01C6 82DF xcall _LCD_write_char
01C8 .dbline 128
01C8 ; s++;
01C8 4F5F subi R20,255 ; offset = 1
01CA 5F4F sbci R21,255
01CC .dbline 129
01CC ; }
01CC L35:
01CC .dbline 125
01CC FA01 movw R30,R20
01CE 2080 ldd R2,z+0
01D0 2220 tst R2
01D2 A1F7 brne L34
01D4 X7:
01D4 .dbline -2
01D4 L33:
01D4 .dbline 0 ; func end
01D4 0C940000 xjmp pop_xgset303C
01D8 .dbsym r s 20 pc
01D8 .dbsym r Y 12 c
01D8 .dbsym r X 10 c
01D8 .dbend
01D8 .dbfunc e LCD_write_data _LCD_write_data fV
01D8 ; data -> y+0
01D8 ; i -> R20
01D8 ; dat -> R14,R15
01D8 ; Y -> R12
01D8 ; X -> R10
.even
01D8 _LCD_write_data::
01D8 0E940000 xcall push_xgset30FC
01DC C22E mov R12,R18
01DE A02E mov R10,R16
01E0 2497 sbiw R28,4
01E2 EC84 ldd R14,y+12
01E4 FD84 ldd R15,y+13
01E6 .dbline -1
01E6 .dbline 138
01E6 ; }
01E6 ;
01E6 ; /*-------------------------------------------------------------
01E6 ; 函数: 写数字
01E6 ; 参数:列---X=0~15,行---Y=0~1 写地址
01E6 ; dat为所要写的数字
01E6 ; ---------------------------------------------------------------*/
01E6 ; void LCD_write_data(unsigned char X,unsigned char Y,int dat)
01E6 ; {
01E6 .dbline 151
01E6 ; //unsigned char fuhao;
01E6 ; unsigned char data[4];
01E6 ; unsigned char i;
01E6 ;
01E6 ; /*if(dat<0)
01E6 ; {
01E6 ; fuhao='-';
01E6 ; dat=0-dat;
01E6 ; }
01E6 ; else
01E6 ; fuhao=' ';
01E6 ; data[0]=fuhao;*/
01E6 ; data[0]=dat/1000+0x30; dat%=1000;
01E6 28EE ldi R18,1000
01E8 33E0 ldi R19,3
01EA 8701 movw R16,R14
01EC 0E940000 xcall div16s
01F0 C801 movw R24,R16
01F2 C096 adiw R24,48
01F4 8883 std y+0,R24
01F6 .dbline 151
01F6 28EE ldi R18,1000
01F8 33E0 ldi R19,3
01FA 8701 movw R16,R14
01FC 0E940000 xcall mod16s
0200 7801 movw R14,R16
0202 .dbline 152
0202 ; data[1]=dat/100+0x30; dat%=100;
0202 24E6 ldi R18,100
0204 30E0 ldi R19,0
0206 0E940000 xcall div16s
020A C801 movw R24,R16
020C C096 adiw R24,48
020E 8983 std y+1,R24
0210 .dbline 152
0210 24E6 ldi R18,100
0212 30E0 ldi R19,0
0214 8701 movw R16,R14
0216 0E940000 xcall mod16s
021A 7801 movw R14,R16
021C .dbline 153
021C ; data[2]=dat/10+0x30;
021C 2AE0 ldi R18,10
021E 30E0 ldi R19,0
0220 0E940000 xcall div16s
0224 C801 movw R24,R16
0226 C096 adiw R24,48
0228 8A83 std y+2,R24
022A .dbline 154
022A ; data[3]=dat%10+0x30;
022A 2AE0 ldi R18,10
022C 30E0 ldi R19,0
022E 8701 movw R16,R14
0230 0E940000 xcall mod16s
0234 C801 movw R24,R16
0236 C096 adiw R24,48
0238 8B83 std y+3,R24
023A .dbline 156
023A ;
023A ; LCD_set_xy(X,Y);
023A 2C2D mov R18,R12
023C 0A2D mov R16,R10
023E 2EDF xcall _LCD_set_xy
0240 .dbline 157
0240 ; for(i=0;i<4;i++)
0240 4427 clr R20
0242 0BC0 xjmp L44
0244 L41:
0244 .dbline 158
0244 ; LCD_write_char(0,data[i]);
0244 CE01 movw R24,R28
0246 E42F mov R30,R20
0248 FF27 clr R31
024A E80F add R30,R24
024C F91F adc R31,R25
024E 2081 ldd R18,z+0
0250 3327 clr R19
0252 0027 clr R16
0254 1127 clr R17
0256 3ADF xcall _LCD_write_char
0258 L42:
0258 .dbline 157
0258 4395 inc R20
025A L44:
025A .dbline 157
025A 4430 cpi R20,4
025C 98F3 brlo L41
025E X8:
025E .dbline -2
025E L37:
025E .dbline 0 ; func end
025E 2496 adiw R28,4
0260 0C940000 xjmp pop_xgset30FC
0264 .dbsym l data 0 A[4:4]c
0264 .dbsym r i 20 c
0264 .dbsym r dat 14 I
0264 .dbsym r Y 12 c
0264 .dbsym r X 10 c
0264 .dbend
0264 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\pcf8563.h
0264 .dbfunc e write_tim _write_tim fc
0264 ; a -> R16
.even
0264 _write_tim::
0264 .dbline -1
0264 .dbline 15
0264 ; /*******************************************
0264 ; * PCF8563的I2C(TWI)操作函数 *
0264 ; * 文 件 名:pcf8563.h *
0264 ; * 函数功能:利用CPU的硬件TWI接口操作 *
0264 ; * 设 计:张子凤 *
0264 ; * 修改日期:2008年11月11日 *
0264 ; * 版 本:V1.0 *
0264 ; * 主控芯片:Mega16 *
0264 ; *******************************************/
0264 ; //全局变量定义
0264 ; unsigned char timer[8]; //时钟数据
0264 ;
0264 ; //写入时间函数
0264 ; unsigned char write_tim(unsigned char a)
0264 ; {
0264 .dbline 16
0264 ; sendbyte(a); //发送
0264 .dbline 16
0264 03B9 out 0x3,R16
0266 .dbline 16
0266 84E8 ldi R24,132
0268 86BF out 0x36,R24
026A .dbline 16
026A .dbline 16
026A .dbline 17
026A ; waitack(); //等待写完成
026A L46:
026A .dbline 17
026A L47:
026A .dbline 17
026A 26B6 in R2,0x36
026C 27FE sbrs R2,7
026E FDCF rjmp L46
0270 X9:
0270 .dbline 17
0270 .dbline 17
0270 .dbline 18
0270 ; if(chkack()!=MT_SLA_ACK)return I2C_ERR; //检查是否正确写入
0270 81B1 in R24,0x1
0272 887F andi R24,248
0274 8831 cpi R24,24
0276 11F0 breq L49
0278 X10:
0278 .dbline 18
0278 0027 clr R16
027A 01C0 xjmp L45
027C L49:
027C .dbline 19
027C ; else return I2C_CRR;
027C 01E0 ldi R16,1
027E .dbline -2
027E L45:
027E .dbline 0 ; func end
027E 0895 ret
0280 .dbsym r a 16 c
0280 .dbend
0280 .dbfunc e read_tim _read_tim fc
.even
0280 _read_tim::
0280 .dbline -1
0280 .dbline 24
0280 ; }
0280 ;
0280 ; //读出时间函数
0280 ; unsigned char read_tim(void)
0280 ; {
0280 .dbline 25
0280 ; rcvackbyte(); //接收一字节并返回应答
0280 84EC ldi R24,196
0282 86BF out 0x36,R24
0284 .dbline 26
0284 ; waitack(); //等待接收完成
0284 L52:
0284 .dbline 26
0284 L53:
0284 .dbline 26
0284 26B6 in R2,0x36
0286 27FE sbrs R2,7
0288 FDCF rjmp L52
028A X11:
028A .dbline 26
028A .dbline 26
028A .dbline 27
028A ; if(chkack()!=MR_DATA_ACK)return I2C_ERR; //检查是否接收成功
028A 81B1 in R24,0x1
028C 887F andi R24,248
028E 8035 cpi R24,80
0290 11F0 breq L55
0292 X12:
0292 .dbline 27
0292 0027 clr R16
0294 01C0 xjmp L51
0296 L55:
0296 .dbline 29
0296 ; else
0296 ; return(TWDR); //读出时钟数据
0296 03B1 in R16,0x3
0298 .dbline -2
0298 L51:
0298 .dbline 0 ; func end
0298 0895 ret
029A .dbend
029A .dbfunc e read_timer _read_timer fc
.even
029A _read_timer::
029A AA92 st -y,R10
029C 4A93 st -y,R20
029E .dbline -1
029E .dbline 36
029E ; }
029E ;
029E ; /**********************************
029E ; * 读出数据函数 *
029E ; **********************************/
029E ; unsigned char read_timer(void)
029E ; {
029E .dbline 37
029E ; start(); //启动总线
029E 84EA ldi R24,164
02A0 86BF out 0x36,R24
02A2 .dbline 38
02A2 ; waitack(); //等待启动完成
02A2 L58:
02A2 .dbline 38
02A2 L59:
02A2 .dbline 38
02A2 26B6 in R2,0x36
02A4 27FE sbrs R2,7
02A6 FDCF rjmp L58
02A8 X13:
02A8 .dbline 38
02A8 .dbline 38
02A8 .dbline 39
02A8 ; if(chkack()!=START)return I2C_ERR; //检查是否启动成功
02A8 81B1 in R24,0x1
02AA 887F andi R24,248
02AC 8830 cpi R24,8
02AE 11F0 breq L61
02B0 X14:
02B0 .dbline 39
02B0 0027 clr R16
02B2 4BC0 xjmp L57
02B4 L61:
02B4 .dbline 40
02B4 ; write_tim(PCF8563_SLA_W); //发送写地址
02B4 02EA ldi R16,162
02B6 D6DF xcall _write_tim
02B8 .dbline 41
02B8 ; write_tim(0x02); //写数据地址
02B8 02E0 ldi R16,2
02BA D4DF xcall _write_tim
02BC .dbline 43
02BC ;
02BC ; start();
02BC 84EA ldi R24,164
02BE 86BF out 0x36,R24
02C0 .dbline 44
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -