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

📄 clock.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    0016 E5CF      LDI	R28,0x5F
    0017 E0D2      LDI	R29,2
    0018 BFCD      OUT	P3D,R28
    0019 BFDE      OUT	P3E,R29
    001A 51C0      SUBI	R28,0x10
    001B 40D0      SBCI	R29,0
    001C EA0A      LDI	R16,0xAA
    001D 8308      STD	R16,0+Y
    001E 2400      CLR	R0
    001F E6E2      LDI	R30,0x62
    0020 E0F0      LDI	R31,0
    0021 E010      LDI	R17,0
    0022 36E7      CPI	R30,0x67
    0023 07F1      CPC	R31,R17
    0024 F011      BEQ	0x0027
    0025 9201      ST	R0,Z+
    0026 CFFB      RJMP	0x0022
    0027 8300      STD	R16,0+Z
    0028 E2EA      LDI	R30,0x2A
    0029 E0F0      LDI	R31,0
    002A E6A0      LDI	R26,0x60
    002B E0B0      LDI	R27,0
    002C E010      LDI	R17,0
    002D 32EC      CPI	R30,0x2C
    002E 07F1      CPC	R31,R17
    002F F021      BEQ	0x0034
    0030 95C8      LPM
    0031 9631      ADIW	R30,1
    0032 920D      ST	R0,X+
    0033 CFF9      RJMP	0x002D
    0034 D1CC      RCALL	_main
_exit:
    0035 CFFF      RJMP	_exit
_receive_byte:
  i                    --> R20
  temp                 --> R22
    0036 D2CB      RCALL	push_gset2
FILE: D:\sl279\8515\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<io8515.h>
(0010) #include<slavr.h>
(0011) #pragma interrupt_handler timer1_ovf:7
(0012) #pragma interrupt_handler timer0_ovf:8
(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;
    0037 2766      CLR	R22
(0027)    DDRC&=0xfb;              
    0038 B384      IN	R24,P14
    0039 7F8B      ANDI	R24,0xFB
    003A BB84      OUT	P14,R24
(0028)    delay_us(90);
    003B E50A      LDI	R16,0x5A
    003C E010      LDI	R17,0
    003D D260      RCALL	_delay_us
(0029)    for(i=0;i<8;i++)
    003E 2744      CLR	R20
    003F C00B      RJMP	0x004B
(0030)        {
(0031)         temp=temp<<1;  
    0040 0F66      LSL	R22
(0032)         PORTC|=0x08;//clk=1      
    0041 9AAB      SBI	P15,3
(0033)         delay_us(10);
    0042 E00A      LDI	R16,0xA
    0043 E010      LDI	R17,0
    0044 D259      RCALL	_delay_us
(0034)         if((PINC&0x04)!=0) 
    0045 9B9A      SBIS	P13,2
    0046 C001      RJMP	0x0048
(0035)            temp|=0x01;   
    0047 6061      ORI	R22,1
(0036)         PORTC&=0xf7;//clk=0      
    0048 D2DE      RCALL	0x0327
(0037)         delay_us(10);
    0049 D254      RCALL	_delay_us
(0038)        }
    004A 9543      INC	R20
    004B 3048      CPI	R20,0x8
    004C F398      BCS	0x0040
(0039)    DDRC|=0x04;  
    004D 9AA2      SBI	P14,2
(0040)    return temp;
    004E 2F06      MOV	R16,R22
    004F 2711      CLR	R17
    0050 D2BD      RCALL	pop_gset2
    0051 9508      RET
_send_byte:
  i                    --> R20
  para                 --> R22
    0052 D2AF      RCALL	push_gset2
    0053 2F60      MOV	R22,R16
(0041)    }  
(0042) /*         字节发送函数            */
(0043) void send_byte(unsigned char para)
(0044)      {
(0045)       unsigned char i;
(0046)       PORTC&=0xef;//cs=0      
    0054 B385      IN	R24,P15
    0055 7E8F      ANDI	R24,0xEF
    0056 BB85      OUT	P15,R24
(0047)       delay_us(90);
    0057 E50A      LDI	R16,0x5A
    0058 E010      LDI	R17,0
    0059 D244      RCALL	_delay_us
(0048)       for(i=0;i<8;i++)
    005A 2744      CLR	R20
    005B C011      RJMP	0x006D
(0049)          {
(0050)           if((para&0x80)==0x80)
    005C 2F86      MOV	R24,R22
    005D 7880      ANDI	R24,0x80
    005E 3880      CPI	R24,0x80
    005F F411      BNE	0x0062
(0051)               PORTC|=0x04;//data=1   
    0060 9AAA      SBI	P15,2
    0061 C003      RJMP	0x0065
(0052)           else
(0053)               PORTC&=0xfb;//data=0   
    0062 B385      IN	R24,P15
    0063 7F8B      ANDI	R24,0xFB
    0064 BB85      OUT	P15,R24
(0054)           PORTC|=0x08;//clk=1       
    0065 9AAB      SBI	P15,3
(0055)           delay_us(10);
    0066 E00A      LDI	R16,0xA
    0067 E010      LDI	R17,0
    0068 D235      RCALL	_delay_us
    0069 D2BD      RCALL	0x0327
(0056)           PORTC&=0xf7;//clk=0       
(0057)           delay_us(10);
    006A D233      RCALL	_delay_us
(0058)           para=para<<1;                
    006B 0F66      LSL	R22
(0059)          }  	 
    006C 9543      INC	R20
    006D 3048      CPI	R20,0x8
    006E F368      BCS	0x005C
(0060)      }
    006F D29E      RCALL	pop_gset2
    0070 9508      RET
_write279:
  cmd2                 --> R20
  cmd1                 --> R22
    0071 D290      RCALL	push_gset2
    0072 2F42      MOV	R20,R18
    0073 2F60      MOV	R22,R16
(0061) /*               写sl279双字节命令                 */          
(0062) void write279(unsigned char cmd1, unsigned char cmd2)
(0063) {
(0064) 	send_byte (cmd1);
    0074 2F06      MOV	R16,R22
    0075 DFDC      RCALL	_send_byte
(0065) 	send_byte (cmd2);                              
    0076 2F04      MOV	R16,R20
    0077 DFDA      RCALL	_send_byte
(0066) 	PORTC|=0x10;
    0078 9AAC      SBI	P15,4
(0067) }
    0079 D294      RCALL	pop_gset2
    007A 9508      RET
_initdis:
  i                    --> R10
  key                  --> R20
    007B D28F      RCALL	push_gset5
(0068) /*在启动时设置时间,按shift键后进入计时状态*/
(0069) void initdis()                  
(0070) {
(0071)  unsigned char i=7;
    007C E087      LDI	R24,7
    007D 2EA8      MOV	R10,R24
(0072)  unsigned char key=0;
    007E 2744      CLR	R20
(0073)  write279(0xc8,0);
    007F 2722      CLR	R18
    0080 EC08      LDI	R16,0xC8
    0081 DFEF      RCALL	_write279
(0074)  write279(0xc9,0);
    0082 2722      CLR	R18
    0083 EC09      LDI	R16,0xC9
    0084 DFEC      RCALL	_write279
(0075)  write279(0x92,1);
    0085 E021      LDI	R18,1
    0086 E902      LDI	R16,0x92
    0087 DFE9      RCALL	_write279
(0076)  write279(0xcb,0);
    0088 2722      CLR	R18
    0089 EC0B      LDI	R16,0xCB
    008A DFE6      RCALL	_write279
(0077)  write279(0xcc,0);
    008B 2722      CLR	R18
    008C EC0C      LDI	R16,0xCC
    008D DFE3      RCALL	_write279
(0078)  write279(0x95,1);
    008E E021      LDI	R18,1
    008F E905      LDI	R16,0x95
    0090 DFE0      RCALL	_write279
(0079)  write279(0xce,0);
    0091 2722      CLR	R18
    0092 EC0E      LDI	R16,0xCE
    0093 DFDD      RCALL	_write279
(0080)  write279(0xcf,0);
    0094 2722      CLR	R18
    0095 EC0F      LDI	R16,0xCF
    0096 DFDA      RCALL	_write279
(0081)  write279(0x88,0x7f);
    0097 E72F      LDI	R18,0x7F
    0098 E808      LDI	R16,0x88
    0099 DFD7      RCALL	_write279
(0082)  do
(0083)    {    
(0084) 	while((PINC&0x02)!=0)
(0085) 	       ;
    009A 9999      SBIC	P13,1
    009B CFFE      RJMP	0x009A
(0086)     send_byte(0x15);
    009C E105      LDI	R16,0x15
    009D DFB4      RCALL	_send_byte
(0087) 	key=receive_byte();
    009E DF97      RCALL	_receive_byte
    009F 2E20      MOV	R2,R16
    00A0 2E31      MOV	R3,R17
    00A1 2D42      MOV	R20,R2
(0088) 	setcs;
    00A2 9AAC      SBI	P15,4
(0089) 	switch (i)
    00A3 2D6A      MOV	R22,R10
    00A4 2777      CLR	R23
    00A5 3060      CPI	R22,0
    00A6 E0E0      LDI	R30,0
    00A7 077E      CPC	R23,R30
    00A8 F40C      BGE	0x00AA
    00A9 C0BC      RJMP	0x0166
    00AA E087      LDI	R24,7
    00AB E090      LDI	R25,0
    00AC 1786      CP	R24,R22
    00AD 0797      CPC	R25,R23
    00AE F40C      BGE	0x00B0
    00AF C0B6      RJMP	0x0166
    00B0 E18A      LDI	R24,0x1A
    00B1 E090      LDI	R25,0
    00B2 2F06      MOV	R16,R22
    00B3 2F17      MOV	R17,R23
    00B4 0F00      LSL	R16
    00B5 1F11      ROL	R17
    00B6 0F08      ADD	R16,R24
    00B7 1F19      ADC	R17,R25
    00B8 D259      RCALL	lpm16
    00B9 2FE0      MOV	R30,R16
    00BA 2FF1      MOV	R31,R17
    00BB 9409      IJMP
(0090) 	 {
(0091) 	  case 7:{
(0092) 	          if(key<3)
    00BC 3043      CPI	R20,3
    00BD F008      BCS	0x00BF
    00BE C0A7      RJMP	0x0166
(0093) 			    {
(0094) 				 write279(0xc8+i,key);
    00BF 2F24      MOV	R18,R20
    00C0 2D0A      MOV	R16,R10
    00C1 5308      SUBI	R16,0x38
    00C2 DFAE      RCALL	_write279
(0095) 				 i--;
    00C3 94AA      DEC	R10
(0096) 				 write279(0x88,0xbf);
    00C4 EB2F      LDI	R18,0xBF
    00C5 E808      LDI	R16,0x88
    00C6 DFAA      RCALL	_write279
(0097) 				 time.hour=time.hour%10+key*10;
    00C7 E00A      LDI	R16,0xA
    00C8 2F14      MOV	R17,R20
    00C9 D1F4      RCALL	mpy8s
    00CA 2E20      MOV	R2,R16
    00CB E01A      LDI	R17,0xA
    00CC 91000066  LDS	R16,_time+2
    00CE D1FB      RCALL	mod8s
    00CF 2E30      MOV	R3,R16
    00D0 0C32      ADD	R3,R2
    00D1 92300066  STS	R3,_time+2
(0098) 				}			  
(0099) 			  break;
    00D3 C092      RJMP	0x0166
(0100) 	         }
(0101) 	  case 6:{
(0102) 	          if(key<10)
    00D4 304A      CPI	R20,0xA
    00D5 F008      BCS	0x00D7
    00D6 C08F      RJMP	0x0166
(0103) 			    {
(0104) 				 if((time.hour<20)|(key<4))
    00D7 91800066  LDS	R24,_time+2
    00D9 3184      CPI	R24,0x14
    00DA F42C      BGE	0x00E0
    00DB E081      LDI	R24,1
    00DC E090      LDI	R25,0
    00DD 2EE8      MOV	R14,R24
    00DE 2EF9      MOV	R15,R25
    00DF C002      RJMP	0x00E2
    00E0 24EE      CLR	R14
    00E1 24FF      CLR	R15
    00E2 3044      CPI	R20,4
    00E3 F428      BCC	0x00E9
    00E4 E081      LDI	R24,1
    00E5 E090      LDI	R25,0
    00E6 2EC8      MOV	R12,R24
    00E7 2ED9      MOV	R13,R25
    00E8 C002      RJMP	0x00EB
    00E9 24CC      CLR	R12
    00EA 24DD      CLR	R13
    00EB 2C2E      MOV	R2,R14
    00EC 2C3F      MOV	R3,R15
    00ED 282C      OR	R2,R12
    00EE 283D      OR	R3,R13
    00EF 2022      TST	R2
    00F0 F419      BNE	0x00F4
    00F1 2033      TST	R3
    00F2 F409      BNE	0x00F4
    00F3 C072      RJMP	0x0166
(0105) 				   {
(0106) 				    write279(0xc8+i,key);
    00F4 2F24      MOV	R18,R20
    00F5 2D0A      MOV	R16,R10
    00F6 5308      SUBI	R16,0x38
    00F7 DF79      RCALL	_write279
(0107) 				    i--;
    00F8 94AA      DEC	R10
(0108) 				    i--;
    00F9 94AA      DEC	R10
(0109) 				    write279(0x88,0xef);
    00FA EE2F      LDI	R18,0xEF
    00FB E808      LDI	R16,0x88
    00FC DF74      RCALL	_write279
(0110) 					time.hour=(time.hour/10)*10+key;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -