📄 clock.lst
字号:
__text_start:
__start:
001A E5CF LDI R28,0x5F
001B E0D2 LDI R29,2
001C BFCD OUT P3D,R28
001D BFDE OUT P3E,R29
001E 51C0 SUBI R28,0x10
001F 40D0 SBCI R29,0
0020 EA0A LDI R16,0xAA
0021 8308 STD R16,0+Y
0022 2400 CLR R0
0023 E6E2 LDI R30,0x62
0024 E0F0 LDI R31,0
0025 E010 LDI R17,0
0026 36E7 CPI R30,0x67
0027 07F1 CPC R31,R17
0028 F011 BEQ 0x002B
0029 9201 ST R0,Z+
002A CFFB RJMP 0x0026
002B 8300 STD R16,0+Z
002C E3E2 LDI R30,0x32
002D E0F0 LDI R31,0
002E E6A0 LDI R26,0x60
002F E0B0 LDI R27,0
0030 E010 LDI R17,0
0031 33E4 CPI R30,0x34
0032 07F1 CPC R31,R17
0033 F021 BEQ 0x0038
0034 95C8 LPM
0035 9631 ADIW R30,1
0036 920D ST R0,X+
0037 CFF9 RJMP 0x0031
0038 D1CC RCALL _main
_exit:
0039 CFFF RJMP _exit
_receive_byte:
i --> R20
temp --> R22
003A D2CB RCALL push_gset2
FILE: D:\sl279\8535\clock.c
(0000) /************************************************************/
(0001) /* 广州天河双龙电子有限公司 */
(0002) /* http://www.sl.com.cn */
(0003) /* 电脑时钟演示程序(ICCAVR版本) */
(0004) /* 程序作者:詹卫前 */
(0005) /*接线方式:CS=PORTC.4 CLK=PORTC.3 DATA=PORTC.2 KEY=PORTC.1 */
(0006) /* 处理器:AT90S8515 晶振频率:8MHZ */
(0007) /* SL279 晶振频率:12MHZ 使用SLAVR库 */
(0008) /************************************************************/
(0009) #include<io8535.h>
(0010) #include<slavr.h>
(0011) #pragma interrupt_handler timer1_ovf:9
(0012) #pragma interrupt_handler timer0_ovf:10
(0013) #define setcs PORTC|=0x10;
(0014) unsigned char flag=0;//时间刷新标志
(0015) unsigned char dflag=0;//计数方向标志
(0016) /* 定义结构体time */
(0017) struct time
(0018) {
(0019) signed char second;
(0020) signed char minute;
(0021) signed char hour;
(0022) } time;
(0023) /* 字节接收函数 */
(0024) unsigned char receive_byte(void)
(0025) {
(0026) unsigned char i,temp=0;
003B 2766 CLR R22
(0027) DDRC&=0xfb;
003C B384 IN R24,P14
003D 7F8B ANDI R24,0xFB
003E BB84 OUT P14,R24
(0028) delay_us(90);
003F E50A LDI R16,0x5A
0040 E010 LDI R17,0
0041 D260 RCALL _delay_us
(0029) for(i=0;i<8;i++)
0042 2744 CLR R20
0043 C00B RJMP 0x004F
(0030) {
(0031) temp=temp<<1;
0044 0F66 LSL R22
(0032) PORTC|=0x08;//clk=1
0045 9AAB SBI P15,3
(0033) delay_us(10);
0046 E00A LDI R16,0xA
0047 E010 LDI R17,0
0048 D259 RCALL _delay_us
(0034) if((PINC&0x04)!=0)
0049 9B9A SBIS P13,2
004A C001 RJMP 0x004C
(0035) temp|=0x01;
004B 6061 ORI R22,1
(0036) PORTC&=0xf7;//clk=0
004C D2DE RCALL 0x032B
(0037) delay_us(10);
004D D254 RCALL _delay_us
(0038) }
004E 9543 INC R20
004F 3048 CPI R20,0x8
0050 F398 BCS 0x0044
(0039) DDRC|=0x04;
0051 9AA2 SBI P14,2
(0040) return temp;
0052 2F06 MOV R16,R22
0053 2711 CLR R17
0054 D2BD RCALL pop_gset2
0055 9508 RET
_send_byte:
i --> R20
para --> R22
0056 D2AF RCALL push_gset2
0057 2F60 MOV R22,R16
(0041) }
(0042) /* 字节发送函数 */
(0043) void send_byte(unsigned char para)
(0044) {
(0045) unsigned char i;
(0046) PORTC&=0xef;//cs=0
0058 B385 IN R24,P15
0059 7E8F ANDI R24,0xEF
005A BB85 OUT P15,R24
(0047) delay_us(90);
005B E50A LDI R16,0x5A
005C E010 LDI R17,0
005D D244 RCALL _delay_us
(0048) for(i=0;i<8;i++)
005E 2744 CLR R20
005F C011 RJMP 0x0071
(0049) {
(0050) if((para&0x80)==0x80)
0060 2F86 MOV R24,R22
0061 7880 ANDI R24,0x80
0062 3880 CPI R24,0x80
0063 F411 BNE 0x0066
(0051) PORTC|=0x04;//data=1
0064 9AAA SBI P15,2
0065 C003 RJMP 0x0069
(0052) else
(0053) PORTC&=0xfb;//data=0
0066 B385 IN R24,P15
0067 7F8B ANDI R24,0xFB
0068 BB85 OUT P15,R24
(0054) PORTC|=0x08;//clk=1
0069 9AAB SBI P15,3
(0055) delay_us(10);
006A E00A LDI R16,0xA
006B E010 LDI R17,0
006C D235 RCALL _delay_us
006D D2BD RCALL 0x032B
(0056) PORTC&=0xf7;//clk=0
(0057) delay_us(10);
006E D233 RCALL _delay_us
(0058) para=para<<1;
006F 0F66 LSL R22
(0059) }
0070 9543 INC R20
0071 3048 CPI R20,0x8
0072 F368 BCS 0x0060
(0060) }
0073 D29E RCALL pop_gset2
0074 9508 RET
_write279:
cmd2 --> R20
cmd1 --> R22
0075 D290 RCALL push_gset2
0076 2F42 MOV R20,R18
0077 2F60 MOV R22,R16
(0061) /* 写sl279双字节命令 */
(0062) void write279(unsigned char cmd1, unsigned char cmd2)
(0063) {
(0064) send_byte (cmd1);
0078 2F06 MOV R16,R22
0079 DFDC RCALL _send_byte
(0065) send_byte (cmd2);
007A 2F04 MOV R16,R20
007B DFDA RCALL _send_byte
(0066) PORTC|=0x10;
007C 9AAC SBI P15,4
(0067) }
007D D294 RCALL pop_gset2
007E 9508 RET
_initdis:
i --> R10
key --> R20
007F D28F RCALL push_gset5
(0068) /*在启动时设置时间,按shift键后进入计时状态*/
(0069) void initdis()
(0070) {
(0071) unsigned char i=7;
0080 E087 LDI R24,7
0081 2EA8 MOV R10,R24
(0072) unsigned char key=0;
0082 2744 CLR R20
(0073) write279(0xc8,0);
0083 2722 CLR R18
0084 EC08 LDI R16,0xC8
0085 DFEF RCALL _write279
(0074) write279(0xc9,0);
0086 2722 CLR R18
0087 EC09 LDI R16,0xC9
0088 DFEC RCALL _write279
(0075) write279(0x92,1);
0089 E021 LDI R18,1
008A E902 LDI R16,0x92
008B DFE9 RCALL _write279
(0076) write279(0xcb,0);
008C 2722 CLR R18
008D EC0B LDI R16,0xCB
008E DFE6 RCALL _write279
(0077) write279(0xcc,0);
008F 2722 CLR R18
0090 EC0C LDI R16,0xCC
0091 DFE3 RCALL _write279
(0078) write279(0x95,1);
0092 E021 LDI R18,1
0093 E905 LDI R16,0x95
0094 DFE0 RCALL _write279
(0079) write279(0xce,0);
0095 2722 CLR R18
0096 EC0E LDI R16,0xCE
0097 DFDD RCALL _write279
(0080) write279(0xcf,0);
0098 2722 CLR R18
0099 EC0F LDI R16,0xCF
009A DFDA RCALL _write279
(0081) write279(0x88,0x7f);
009B E72F LDI R18,0x7F
009C E808 LDI R16,0x88
009D DFD7 RCALL _write279
(0082) do
(0083) {
(0084) while((PINC&0x02)!=0)
(0085) ;
009E 9999 SBIC P13,1
009F CFFE RJMP 0x009E
(0086) send_byte(0x15);
00A0 E105 LDI R16,0x15
00A1 DFB4 RCALL _send_byte
(0087) key=receive_byte();
00A2 DF97 RCALL _receive_byte
00A3 2E20 MOV R2,R16
00A4 2E31 MOV R3,R17
00A5 2D42 MOV R20,R2
(0088) setcs;
00A6 9AAC SBI P15,4
(0089) switch (i)
00A7 2D6A MOV R22,R10
00A8 2777 CLR R23
00A9 3060 CPI R22,0
00AA E0E0 LDI R30,0
00AB 077E CPC R23,R30
00AC F40C BGE 0x00AE
00AD C0BC RJMP 0x016A
00AE E087 LDI R24,7
00AF E090 LDI R25,0
00B0 1786 CP R24,R22
00B1 0797 CPC R25,R23
00B2 F40C BGE 0x00B4
00B3 C0B6 RJMP 0x016A
00B4 E282 LDI R24,0x22
00B5 E090 LDI R25,0
00B6 2F06 MOV R16,R22
00B7 2F17 MOV R17,R23
00B8 0F00 LSL R16
00B9 1F11 ROL R17
00BA 0F08 ADD R16,R24
00BB 1F19 ADC R17,R25
00BC D259 RCALL lpm16
00BD 2FE0 MOV R30,R16
00BE 2FF1 MOV R31,R17
00BF 9409 IJMP
(0090) {
(0091) case 7:{
(0092) if(key<3)
00C0 3043 CPI R20,3
00C1 F008 BCS 0x00C3
00C2 C0A7 RJMP 0x016A
(0093) {
(0094) write279(0xc8+i,key);
00C3 2F24 MOV R18,R20
00C4 2D0A MOV R16,R10
00C5 5308 SUBI R16,0x38
00C6 DFAE RCALL _write279
(0095) i--;
00C7 94AA DEC R10
(0096) write279(0x88,0xbf);
00C8 EB2F LDI R18,0xBF
00C9 E808 LDI R16,0x88
00CA DFAA RCALL _write279
(0097) time.hour=time.hour%10+key*10;
00CB E00A LDI R16,0xA
00CC 2F14 MOV R17,R20
00CD D1F4 RCALL mpy8s
00CE 2E20 MOV R2,R16
00CF E01A LDI R17,0xA
00D0 91000066 LDS R16,_time+2
00D2 D1FB RCALL mod8s
00D3 2E30 MOV R3,R16
00D4 0C32 ADD R3,R2
00D5 92300066 STS R3,_time+2
(0098) }
(0099) break;
00D7 C092 RJMP 0x016A
(0100) }
(0101) case 6:{
(0102) if(key<10)
00D8 304A CPI R20,0xA
00D9 F008 BCS 0x00DB
00DA C08F RJMP 0x016A
(0103) {
(0104) if((time.hour<20)|(key<4))
00DB 91800066 LDS R24,_time+2
00DD 3184 CPI R24,0x14
00DE F42C BGE 0x00E4
00DF E081 LDI R24,1
00E0 E090 LDI R25,0
00E1 2EE8 MOV R14,R24
00E2 2EF9 MOV R15,R25
00E3 C002 RJMP 0x00E6
00E4 24EE CLR R14
00E5 24FF CLR R15
00E6 3044 CPI R20,4
00E7 F428 BCC 0x00ED
00E8 E081 LDI R24,1
00E9 E090 LDI R25,0
00EA 2EC8 MOV R12,R24
00EB 2ED9 MOV R13,R25
00EC C002 RJMP 0x00EF
00ED 24CC CLR R12
00EE 24DD CLR R13
00EF 2C2E MOV R2,R14
00F0 2C3F MOV R3,R15
00F1 282C OR R2,R12
00F2 283D OR R3,R13
00F3 2022 TST R2
00F4 F419 BNE 0x00F8
00F5 2033 TST R3
00F6 F409 BNE 0x00F8
00F7 C072 RJMP 0x016A
(0105) {
(0106) write279(0xc8+i,key);
00F8 2F24 MOV R18,R20
00F9 2D0A MOV R16,R10
00FA 5308 SUBI R16,0x38
00FB DF79 RCALL _write279
(0107) i--;
00FC 94AA DEC R10
(0108) i--;
00FD 94AA DEC R10
(0109) write279(0x88,0xef);
00FE EE2F LDI R18,0xEF
00FF E808 LDI R16,0x88
0100 DF74 RCALL _write279
(0110) time.hour=(time.hour/10)*10+key;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -