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

📄 clock.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 3 页
字号:
__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 + -