📄 12864串口显示.lst
字号:
02B0 923A ST R3,-Y
02B1 922A ST R2,-Y
02B2 E20A LDI R16,0x2A
02B3 E010 LDI R17,0
02B4 D588 RCALL lpm32
02B5 933A ST R19,-Y
02B6 932A ST R18,-Y
02B7 931A ST R17,-Y
02B8 930A ST R16,-Y
02B9 D6B9 RCALL cmp32f
02BA F0B4 BLT 0x02D1
02BB 01FE MOVW R30,R28
02BC 8024 LDD R2,Z+4
02BD 8035 LDD R3,Z+5
02BE 8046 LDD R4,Z+6
02BF 8057 LDD R5,Z+7
02C0 925A ST R5,-Y
02C1 924A ST R4,-Y
02C2 923A ST R3,-Y
02C3 922A ST R2,-Y
02C4 E20A LDI R16,0x2A
02C5 E010 LDI R17,0
02C6 D576 RCALL lpm32
02C7 933A ST R19,-Y
02C8 932A ST R18,-Y
02C9 931A ST R17,-Y
02CA 930A ST R16,-Y
02CB D65A RCALL sub32f
02CC D5BF RCALL fp2int
02CD 01B8 MOVW R22,R16
02CE 5060 SUBI R22,0
02CF 4870 SBCI R23,0x80
02D0 C007 RJMP 0x02D8
02D1 01FE MOVW R30,R28
02D2 8104 LDD R16,Z+4
02D3 8115 LDD R17,Z+5
02D4 8126 LDD R18,Z+6
02D5 8137 LDD R19,Z+7
02D6 D5B5 RCALL fp2int
02D7 01B8 MOVW R22,R16
02D8 01AB MOVW R20,R22
(0117) dis_buf_18b20[2]=(count%10000)/1000+0x30;
02D9 E120 LDI R18,0x10
02DA E237 LDI R19,0x27
02DB 018A MOVW R16,R20
02DC D4E8 RCALL mod16u
02DD EE28 LDI R18,0xE8
02DE E033 LDI R19,3
02DF D4E7 RCALL div16u
02E0 01C8 MOVW R24,R16
02E1 96C0 ADIW R24,0x30
02E2 93800066 STS 0x66,R24
(0118) dis_buf_18b20[1]=(count%1000)/100+0x30;
02E4 EE28 LDI R18,0xE8
02E5 E033 LDI R19,3
02E6 018A MOVW R16,R20
02E7 D4DD RCALL mod16u
02E8 E624 LDI R18,0x64
02E9 E030 LDI R19,0
02EA D4DC RCALL div16u
02EB 01C8 MOVW R24,R16
02EC 96C0 ADIW R24,0x30
02ED 93800065 STS 0x65,R24
(0119) dis_buf_18b20[0]=(count%100)/10+0x30;
02EF E624 LDI R18,0x64
02F0 E030 LDI R19,0
02F1 018A MOVW R16,R20
02F2 D4D2 RCALL mod16u
02F3 E02A LDI R18,0xA
02F4 E030 LDI R19,0
02F5 D4D1 RCALL div16u
02F6 01C8 MOVW R24,R16
02F7 96C0 ADIW R24,0x30
02F8 93800064 STS 0x64,R24
02FA 9628 ADIW R28,0x8
02FB D511 RCALL pop_gset4
02FC 9508 RET
_read_byte:
i --> R20
dat --> R22
02FD D52A RCALL push_gset2
FILE: C:\DOCUME~1\Administrator\桌面\16实验\串口显示0\DS1302_drive.h
(0001) #include<iom8v.h>
(0002) #include<macros.h>
(0003) /***复位脚*****/
(0004) #define RST_CLR PORTB&=~(1<<PB2) //电平置地
(0005) #define RST_SET PORTB|=(1<<PB2) //电平置高
(0006) #define RST_IN DDRB&=~(1<<PB2) //方向输入
(0007) #define RST_OUT DDRB|=(1<<PB2) //方向输出
(0008) /*****双向数据******/
(0009) #define IO_CLR PORTB&=~(1<<PB1) //电平置低
(0010) #define IO_SET PORTB|=(1<<PB1) //电平置高
(0011) #define IO_R PINB&(1<<PB1) //电平读取
(0012) #define IO_IN DDRB&=~(1<<PB1) //方向输入
(0013) #define IO_OUT DDRB|=(1<<PB1) //方向输出
(0014) /*********时钟信号********/
(0015) #define SCK_CLR PORTB&=~(1<<PB0) // 时钟信号
(0016) #define SCK_SET PORTB|=(1<<PB0) // 电平置高
(0017) #define SCK_IN DDRB&=~(1<<PB0) //方向输入
(0018) #define SCK_OUT DDRB|=(1<<PB0) //方向输出
(0019) /******************函数声明********************/
(0020) uchar read_byte(void); //读一个字节数据
(0021) void write_byte(uchar dat); //写一字节数据
(0022) void write_ds1302(uchar addr,uchar data); //在指定地址写一字节数据
(0023) void set_ds1302(uchar addr,uchar *p,uchar n); //设置初始化
(0024) void init_ds1302(void); //初始化函数
(0025) /***************从DS1302中读一个字节数据********************/
(0026) uchar read_byte(void)
(0027) {
(0028) uchar i,dat=0;
02FE 2766 CLR R22
(0029) IO_IN;
02FF 98B9 CBI 0x17,1
(0030) IO_CLR;
0300 98C1 CBI 0x18,1
(0031) for(i=0;i<7;i++)
0301 2744 CLR R20
0302 C010 RJMP 0x0313
(0032) {
(0033) SCK_SET;
0303 9AC0 SBI 0x18,0
(0034) delay_us(10);
0304 E00A LDI R16,0xA
0305 E010 LDI R17,0
0306 DE04 RCALL _delay_us
(0035) SCK_CLR;
0307 98C0 CBI 0x18,0
(0036) delay_us(10);
0308 E00A LDI R16,0xA
0309 E010 LDI R17,0
030A DE00 RCALL _delay_us
(0037) if(IO_R)
030B 9BB1 SBIS 0x16,1
030C C002 RJMP 0x030F
(0038) dat|=0X80;
030D 6860 ORI R22,0x80
030E C001 RJMP 0x0310
(0039) else
(0040) dat&=0X7F;
030F 776F ANDI R22,0x7F
(0041) SCK_SET;
0310 9AC0 SBI 0x18,0
(0042) dat=dat>>1;
0311 9566 LSR R22
0312 9543 INC R20
0313 3047 CPI R20,7
0314 F370 BCS 0x0303
(0043) }
(0044) IO_OUT;
0315 9AB9 SBI 0x17,1
(0045) return dat;
0316 2F06 MOV R16,R22
0317 D4F1 RCALL pop_gset2
0318 9508 RET
_write_byte:
i --> R20
dat --> R22
0319 D50E RCALL push_gset2
031A 2F60 MOV R22,R16
(0046) }
(0047) /***************从DS1302中写一个字节数据********************/
(0048) void write_byte(uchar dat)
(0049) {
(0050) uchar i;
(0051) for(i=0;i<8;i++)
031B 2744 CLR R20
031C C00C RJMP 0x0329
(0052) {
(0053) SCK_CLR;
031D 98C0 CBI 0x18,0
(0054) if(dat&0X01)
031E FF60 SBRS R22,0
031F C002 RJMP 0x0322
(0055) IO_SET;
0320 9AC1 SBI 0x18,1
0321 C001 RJMP 0x0323
(0056) else
(0057) IO_CLR;
0322 98C1 CBI 0x18,1
(0058) delay_us(10);
0323 E00A LDI R16,0xA
0324 E010 LDI R17,0
0325 DDE5 RCALL _delay_us
(0059) SCK_SET;
0326 9AC0 SBI 0x18,0
(0060) dat>>=1;
0327 9566 LSR R22
0328 9543 INC R20
0329 3048 CPI R20,0x8
032A F390 BCS 0x031D
032B D4DD RCALL pop_gset2
032C 9508 RET
_read_ds1302:
data --> R20
addr --> R20
032D D4E3 RCALL push_gset1
032E 2F40 MOV R20,R16
(0061) }
(0062) }
(0063) /*********************在指定的地址读一字节数据************************/
(0064) uchar read_ds1302(uchar addr)
(0065) {
(0066) char data;
(0067) RST_CLR;
032F 98C2 CBI 0x18,2
(0068) SCK_CLR;
0330 98C0 CBI 0x18,0
(0069) delay_us(10);
0331 E00A LDI R16,0xA
0332 E010 LDI R17,0
0333 DDD7 RCALL _delay_us
(0070) RST_SET;
0334 9AC2 SBI 0x18,2
(0071) delay_us(10);
0335 E00A LDI R16,0xA
0336 E010 LDI R17,0
0337 DDD3 RCALL _delay_us
(0072) write_byte(addr);
0338 2F04 MOV R16,R20
0339 DFDF RCALL _write_byte
(0073) delay_us(10);
033A E00A LDI R16,0xA
033B E010 LDI R17,0
033C DDCE RCALL _delay_us
(0074) data=read_byte();
033D DFBF RCALL _read_byte
033E 2F40 MOV R20,R16
(0075) delay_us(10);
033F E00A LDI R16,0xA
0340 E010 LDI R17,0
0341 DDC9 RCALL _delay_us
(0076) SCK_CLR;
0342 98C0 CBI 0x18,0
(0077) RST_CLR;
0343 98C2 CBI 0x18,2
(0078) //DDRD|=(1<<PD3);
(0079) //delay_us(100);
(0080) //DDRD&=~(1<<PD3);
(0081) return data;
0344 2F04 MOV R16,R20
0345 D4CE RCALL pop_gset1
0346 9508 RET
_write_ds1302:
data --> R20
addr --> R22
0347 D4E0 RCALL push_gset2
0348 2F42 MOV R20,R18
0349 2F60 MOV R22,R16
(0082) }
(0083) void write_ds1302(uchar addr,uchar data)
(0084) {
(0085) RST_CLR;
034A 98C2 CBI 0x18,2
(0086) SCK_CLR;
034B 98C0 CBI 0x18,0
(0087) delay_us(10);
034C E00A LDI R16,0xA
034D E010 LDI R17,0
034E DDBC RCALL _delay_us
(0088) RST_SET;
034F 9AC2 SBI 0x18,2
(0089) delay_us(10);
0350 E00A LDI R16,0xA
0351 E010 LDI R17,0
0352 DDB8 RCALL _delay_us
(0090) write_byte(addr);
0353 2F06 MOV R16,R22
0354 DFC4 RCALL _write_byte
(0091) delay_us(10);
0355 E00A LDI R16,0xA
0356 E010 LDI R17,0
0357 DDB3 RCALL _delay_us
(0092) SCK_CLR;
0358 98C0 CBI 0x18,0
(0093) delay_us(10);
0359 E00A LDI R16,0xA
035A E010 LDI R17,0
035B DDAF RCALL _delay_us
(0094) write_byte(data);
035C 2F04 MOV R16,R20
035D DFBB RCALL _write_byte
(0095) SCK_CLR;
035E 98C0 CBI 0x18,0
(0096) delay_us(10);
035F E00A LDI R16,0xA
0360 E010 LDI R17,0
0361 DDA9 RCALL _delay_us
(0097) RST_CLR;
0362 98C2 CBI 0x18,2
0363 D4A5 RCALL pop_gset2
0364 9508 RET
_set_ds1302:
n --> R20
p --> R22
addr --> R10
0365 D4C5 RCALL push_gset3
0366 01B9 MOVW R22,R18
0367 2EA0 MOV R10,R16
0368 814E LDD R20,Y+6
(0098) }
(0099) /************************设置初始化函数*******************************/
(0100) void set_ds1302(uchar addr,uchar *p,uchar n)
(0101) {
(0102) write_ds1302(0X8E,0X00);
0369 2722 CLR R18
036A E80E LDI R16,0x8E
036B DFDB RCALL _write_ds1302
(0103) for(;n>0;n--)
036C C00A RJMP 0x0377
(0104) {
(0105) write_ds1302(addr,*p);
036D 01FB MOVW R30,R22
036E 8120 LDD R18,Z+0
036F 2D0A MOV R16,R10
0370 DFD6 RCALL _write_ds1302
(0106) p++;
0371 5F6F SUBI R22,0xFF
0372 4F7F SBCI R23,0xFF
(0107) addr=addr+2;
0373 2D8A MOV R24,R10
0374 5F8E SUBI R24,0xFE
0375 2EA8 MOV R10,R24
0376 954A DEC R20
0377 2422 CLR R2
0378 1624 CP R2,R20
0379 F398 BCS 0x036D
(0108) }
(0109) write_ds1302(0X8E,0X80);
037A E820 LDI R18,0x80
037B E80E LDI R16,0x8E
037C DFCA RCALL _write_ds1302
037D D48D RCALL pop_gset3
037E 9508 RET
(0110) }
(0111) /**********************初始化DS1302函数*******************************/
(0112) void init_ds1302(void)
(0113) {
(0114) RST_CLR;
_init_ds1302:
037F 98C2 CBI 0x18,2
(0115) SCK_CLR;
0380 98C0 CBI 0x18,0
(0116) RST_OUT;
0381 9ABA SBI 0x17,2
(0117) SCK_OUT;
0382 9AB8 SBI 0x17,0
(0118) write_ds1302(0X80,0X00);
0383 2722 CLR R18
0384 E800 LDI R16,0x80
0385 DFC1 RCALL _write_ds1302
(0119) write_ds1302(0X90,0XAB);
0386 EA2B LDI R18,0xAB
0387 E900 LDI R16,0x90
0388 DFBE RCALL _write_ds1302
(0120) write_ds1302(0X8E,0X80);
0389 E820 LDI R18,0x80
038A E80E LDI R16,0x8E
038B DFBB RCALL _write_ds1302
038C 9508 RET
FILE: C:\DOCUME~1\Administrator\桌面\16实验\串口显示0\12864.c
(0001) /**********************************************************************
(0002) 创建人:李小磊(QQ:1397301068)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -