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

📄 clock.lst

📁 采用c语言编写的简易电子时钟程序。利用iccavr系列开发工具编写并调试成功。利用8mhz晶振可以达到实际时钟效果。
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 E6EA      LDI	R30,0x6A
    0024 E0F0      LDI	R31,0
    0025 E010      LDI	R17,0
    0026 36EA      CPI	R30,0x6A
    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 E2EA      LDI	R30,0x2A
    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 D125      RCALL	_main
_exit:
    0039 CFFF      RJMP	_exit
FILE: clock.c
(0000) /**********************************************
(0001)              http://www.sl.com.cn
(0002)       双龙电子公司----电脑时钟演示程序(ICCAVR)
(0003) 	             作者:詹卫前
(0004) 		  1、学习定时器T1溢出中断的使用
(0005) 		  2、学习电脑时钟的编程方法
(0006) 		  3、在程序运行时按SHIFT进行校时
(0007) 	使用注意:1、应包含头文件slavr.h
(0008)               2、在工程选项中的Additional Lib中填入slavr
(0009) 		         使用编译器使用附加库文件libslavr.a
(0010) ***********************************************/
(0011) #include <io8515.h>
(0012) #include <macros.h>
(0013) #include <slavr.h>
(0014) #pragma interrupt_handler timer1:7
(0015) #pragma data:code
(0016)           /*   七段译码字形表     */        
(0017) const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0018) #pragma data:data
(0019)           /*     显示缓冲区       */
(0020) unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
(0021) unsigned char time[3]={0,0,0};
(0022) unsigned char flag=0;
(0023) /*****************************************
(0024)                初始化
(0025) *****************************************/
(0026) void port_init(void)
(0027)  {
(0028)   DDRD=0x3f;
_port_init:
    003A E38F      LDI	R24,0x3F
    003B BB81      OUT	P11,R24
(0029)   DDRB=0xff;
    003C EF8F      LDI	R24,0xFF
    003D BB87      OUT	P17,R24
(0030)   PORTD=0xff;
    003E BB82      OUT	P12,R24
(0031)   PORTB=0xff;
    003F BB88      OUT	P18,R24
(0032)   TIMSK=0x80;//开放T1溢出中断
    0040 E880      LDI	R24,0x80
    0041 BF89      OUT	P39,R24
(0033)   TCCR1A=0x00;
    0042 2422      CLR	R2
    0043 BC2F      OUT	P2F,R2
(0034)   TCCR1B=0x04;
    0044 E084      LDI	R24,4
    0045 BD8E      OUT	P2E,R24
(0035)   TCNT1=0x85ee;
    0046 EE8E      LDI	R24,0xEE
    0047 E895      LDI	R25,0x85
    0048 9390004D  STS	R25,0x4D
    004A 9380004C  STS	R24,0x4C
(0036)   SEI();
    004C 9478      BSET	7
(0037)  }
    004D 9508      RET
_hextobcd:
  temp                 --> R20
  i                    --> R22
    004E D23E      RCALL	push_gset2
(0038) /*****************************************
(0039)              刷新LED显示缓冲区
(0040) *****************************************/
(0041) void hextobcd (void)
(0042)    {
(0043)     unsigned char i,temp;
(0044) 	for (i=0;i<3;i++)
    004F 2766      CLR	R22
    0050 C04C      RJMP	0x009D
(0045)     {
(0046) 	temp=time[i]/10;
    0051 E686      LDI	R24,0x66
    0052 E090      LDI	R25,0
    0053 2FE6      MOV	R30,R22
    0054 27FF      CLR	R31
    0055 0FE8      ADD	R30,R24
    0056 1FF9      ADC	R31,R25
    0057 8100      LDD	R16,0+Z
    0058 E01A      LDI	R17,0xA
    0059 D209      RCALL	div8u
    005A 2F40      MOV	R20,R16
(0047) 	temp=temp%10;
    005B E01A      LDI	R17,0xA
    005C D204      RCALL	mod8u
    005D 2F40      MOV	R20,R16
(0048) 	ledbuff[5-2*i]=tabel[temp];
    005E 2E26      MOV	R2,R22
    005F 2433      CLR	R3
    0060 0C22      LSL	R2
    0061 1C33      ROL	R3
    0062 E0E5      LDI	R30,5
    0063 E0F0      LDI	R31,0
    0064 19E2      SUB	R30,R2
    0065 09F3      SBC	R31,R3
    0066 E680      LDI	R24,0x60
    0067 E090      LDI	R25,0
    0068 0FE8      ADD	R30,R24
    0069 1FF9      ADC	R31,R25
    006A E18A      LDI	R24,0x1A
    006B E090      LDI	R25,0
    006C 2E24      MOV	R2,R20
    006D 2433      CLR	R3
    006E 0E28      ADD	R2,R24
    006F 1E39      ADC	R3,R25
    0070 93FA      ST	R31,-Y
    0071 93EA      ST	R30,-Y
    0072 2DE2      MOV	R30,R2
    0073 2DF3      MOV	R31,R3
    0074 95C8      LPM
    0075 91E9      LD	R30,Y+
    0076 91F9      LD	R31,Y+
    0077 8200      STD	R0,0+Z
(0049) 	temp=time[i]%10;
    0078 E686      LDI	R24,0x66
    0079 E090      LDI	R25,0
    007A 2FE6      MOV	R30,R22
    007B 27FF      CLR	R31
    007C 0FE8      ADD	R30,R24
    007D 1FF9      ADC	R31,R25
    007E 8100      LDD	R16,0+Z
    007F E01A      LDI	R17,0xA
    0080 D1E0      RCALL	mod8u
    0081 2F40      MOV	R20,R16
(0050) 	ledbuff[4-2*i]=tabel[temp];
    0082 2E26      MOV	R2,R22
    0083 2433      CLR	R3
    0084 0C22      LSL	R2
    0085 1C33      ROL	R3
    0086 E0E4      LDI	R30,4
    0087 E0F0      LDI	R31,0
    0088 19E2      SUB	R30,R2
    0089 09F3      SBC	R31,R3
    008A E680      LDI	R24,0x60
    008B E090      LDI	R25,0
    008C 0FE8      ADD	R30,R24
    008D 1FF9      ADC	R31,R25
    008E E18A      LDI	R24,0x1A
    008F E090      LDI	R25,0
    0090 2E24      MOV	R2,R20
    0091 2433      CLR	R3
    0092 0E28      ADD	R2,R24
    0093 1E39      ADC	R3,R25
    0094 93FA      ST	R31,-Y
    0095 93EA      ST	R30,-Y
    0096 2DE2      MOV	R30,R2
    0097 2DF3      MOV	R31,R3
    0098 95C8      LPM
    0099 91E9      LD	R30,Y+
    009A 91F9      LD	R31,Y+
    009B 8200      STD	R0,0+Z
(0051) 	}
    009C 9563      INC	R22
    009D 3063      CPI	R22,3
    009E F408      BCC	0x00A0
    009F CFB1      RJMP	0x0051
(0052)    } 
    00A0 D1F5      RCALL	pop_gset2
    00A1 9508      RET
_display:
  i                    --> R20
    00A2 D1D3      RCALL	push_gset1
(0053) /*****************************************
(0054)           六路动态扫描显示电路
(0055) *****************************************/   
(0056) void display(void)
(0057) {
(0058)  unsigned char i;
(0059)  for (i=0;i<6;i++)
    00A3 2744      CLR	R20
    00A4 C016      RJMP	0x00BB
(0060)   {
(0061)    PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
    00A5 E680      LDI	R24,0x60
    00A6 E090      LDI	R25,0
    00A7 2FE4      MOV	R30,R20
    00A8 27FF      CLR	R31
    00A9 0FE8      ADD	R30,R24
    00AA 1FF9      ADC	R31,R25
    00AB 8020      LDD	R2,0+Z
    00AC BA28      OUT	P18,R2
(0062)    PORTD=~(1<<i);   //开始显示
    00AD E001      LDI	R16,1
    00AE 2F14      MOV	R17,R20
    00AF D1EC      RCALL	lsl8
    00B0 2E20      MOV	R2,R16
    00B1 9420      COM	R2
    00B2 BA22      OUT	P12,R2
(0063)    delay_1ms();     //每一位显示保持一定时间
    00B3 D107      RCALL	_delay_1ms
(0064)    PORTD|=(1<<i);   //关闭显示
    00B4 E001      LDI	R16,1
    00B5 2F14      MOV	R17,R20
    00B6 D1E5      RCALL	lsl8
    00B7 B222      IN	R2,P12
    00B8 2A20      OR	R2,R16
    00B9 BA22      OUT	P12,R2
(0065)   }
    00BA 9543      INC	R20
    00BB 3046      CPI	R20,6
    00BC F340      BCS	0x00A5
(0066) }
    00BD D1BB      RCALL	pop_gset1
    00BE 9508      RET
_settime:
  t1                   --> R20
  t3                   --> R22
  t2                   --> R10
    00BF D1D0      RCALL	push_gset3
(0067) /*****************************************
(0068)           设定校时时间
(0069) *****************************************/  
(0070) void settime(void)
(0071)    { 
(0072)     unsigned char t1,t2,t3;
(0073) 	for (t1=0;t1<3;t1++)
    00C0 2744      CLR	R20
    00C1 C097      RJMP	0x0159
(0074) 	{ 
(0075) 	   ledbuff[5-2*t1]|=0x80;
    00C2 2E24      MOV	R2,R20
    00C3 2433      CLR	R3
    00C4 0C22      LSL	R2
    00C5 1C33      ROL	R3
    00C6 E085      LDI	R24,5
    00C7 E090      LDI	R25,0
    00C8 1982      SUB	R24,R2
    00C9 0993      SBC	R25,R3
    00CA E6E0      LDI	R30,0x60
    00CB E0F0      LDI	R31,0
    00CC 0F8E      ADD	R24,R30
    00CD 1F9F      ADC	R25,R31
    00CE 2E28      MOV	R2,R24
    00CF 2E39      MOV	R3,R25
    00D0 2DE2      MOV	R30,R2
    00D1 2DF3      MOV	R31,R3
    00D2 8180      LDD	R24,0+Z
    00D3 6880      ORI	R24,0x80
    00D4 8380      STD	R24,0+Z
(0076)        do
(0077) 	     {
(0078) 		 t2=scan_key();
    00D5 D0FD      RCALL	_scan_key
    00D6 2E20      MOV	R2,R16
    00D7 2E31      MOV	R3,R17
    00D8 2CA2      MOV	R10,R2
(0079) 	  	 display();
    00D9 DFC8      RCALL	_display
(0080) 		 }
(0081) 	   while(t2==0x7f);	 
    00DA 2D8A      MOV	R24,R10
    00DB 378F      CPI	R24,0x7F
    00DC F3C1      BEQ	0x00D5
(0082) 	   do 
(0083) 	     {
(0084) 		 t3=scan_key();
    00DD D0F5      RCALL	_scan_key
    00DE 2E20      MOV	R2,R16
    00DF 2E31      MOV	R3,R17
    00E0 2D62      MOV	R22,R2
(0085) 	     display();	    
    00E1 DFC0      RCALL	_display
(0086) 	     }
(0087)        while (t2==t3);
    00E2 16A6      CP	R10,R22
    00E3 F3C9      BEQ	0x00DD
(0088) 	   time[t1]=time[t1]%10+t2*10;
    00E4 E686      LDI	R24,0x66
    00E5 E090      LDI	R25,0
    00E6 2E24      MOV	R2,R20
    00E7 2433      CLR	R3
    00E8 0E28      ADD	R2,R24
    00E9 1E39      ADC	R3,R25
    00EA E00A      LDI	R16,0xA
    00EB 2D1A      MOV	R17,R10
    00EC D168      RCALL	mpy8s
    00ED 2E40      MOV	R4,R16
    00EE E01A      LDI	R17,0xA
    00EF 2DE2      MOV	R30,R2
    00F0 2DF3      MOV	R31,R3
    00F1 8100      LDD	R16,0+Z
    00F2 D16E      RCALL	mod8u
    00F3 2E50      MOV	R5,R16
    00F4 0C54      ADD	R5,R4
    00F5 2DE2      MOV	R30,R2
    00F6 2DF3      MOV	R31,R3
    00F7 8250      STD	R5,0+Z
(0089) 	   hextobcd();
    00F8 DF55      RCALL	_hextobcd
(0090) 	   ledbuff[5-2*t1]&=0x7f;
    00F9 2E24      MOV	R2,R20
    00FA 2433      CLR	R3
    00FB 0C22      LSL	R2
    00FC 1C33      ROL	R3
    00FD E085      LDI	R24,5
    00FE E090      LDI	R25,0
    00FF 1982      SUB	R24,R2
    0100 0993      SBC	R25,R3
    0101 E6E0      LDI	R30,0x60
    0102 E0F0      LDI	R31,0
    0103 0F8E      ADD	R24,R30
    0104 1F9F      ADC	R25,R31
    0105 2E28      MOV	R2,R24
    0106 2E39      MOV	R3,R25
    0107 2DE2      MOV	R30,R2
    0108 2DF3      MOV	R31,R3
    0109 8180      LDD	R24,0+Z
    010A 778F      ANDI	R24,0x7F
    010B 8380      STD	R24,0+Z
(0091) 	   ledbuff[4-2*t1]|=0x80;
    010C 2E24      MOV	R2,R20
    010D 2433      CLR	R3
    010E 0C22      LSL	R2
    010F 1C33      ROL	R3
    0110 E084      LDI	R24,4
    0111 E090      LDI	R25,0
    0112 1982      SUB	R24,R2
    0113 0993      SBC	R25,R3
    0114 E6E0      LDI	R30,0x60
    0115 E0F0      LDI	R31,0
    0116 0F8E      ADD	R24,R30
    0117 1F9F      ADC	R25,R31
    0118 2E28      MOV	R2,R24
    0119 2E39      MOV	R3,R25
    011A 2DE2      MOV	R30,R2
    011B 2DF3      MOV	R31,R3
    011C 8180      LDD	R24,0+Z
    011D 6880      ORI	R24,0x80
    011E 8380      STD	R24,0+Z
(0092)        do
(0093) 	     {
(0094) 		 t2=scan_key();
    011F D0B3      RCALL	_scan_key
    0120 2E20      MOV	R2,R16
    0121 2E31      MOV	R3,R17
    0122 2CA2      MOV	R10,R2
(0095) 	  	 display();
    0123 DF7E      RCALL	_display
(0096) 		 }
(0097) 	   while(t2==0x7f);	 
    0124 2D8A      MOV	R24,R10
    0125 378F      CPI	R24,0x7F
    0126 F3C1      BEQ	0x011F
(0098) 	   do 
(0099) 	     {
(0100) 		 t3=scan_key();
    0127 D0AB      RCALL	_scan_key
    0128 2E20      MOV	R2,R16
    0129 2E31      MOV	R3,R17
    012A 2D62      MOV	R22,R2
(0101) 	     display();	    
    012B DF76      RCALL	_display
(0102) 	     }
(0103)        while (t2==t3);
    012C 16A6      CP	R10,R22
    012D F3C9      BEQ	0x0127
(0104) 	   t3=time[t1]/10;
    012E E686      LDI	R24,0x66
    012F E090      LDI	R25,0
    0130 2FE4      MOV	R30,R20
    0131 27FF      CLR	R31
    0132 0FE8      ADD	R30,R24
    0133 1FF9      ADC	R31,R25
    0134 8100      LDD	R16,0+Z
    0135 E01A      LDI	R17,0xA
    0136 D12C      RCALL	div8u
    0137 2F60      MOV	R22,R16
(0105) 	   time[t1]=t3*10+t2;
    0138 E00A      LDI	R16,0xA
    0139 2F16      MOV	R17,R22
    013A D11A      RCALL	mpy8s
    013B 2E20      MOV	R2,R16
    013C 0C2A      ADD	R2,R10
    013D E686      LDI	R24,0x66
    013E E090      LDI	R25,0
    013F 2FE4      MOV	R30,R20
    0140 27FF      CLR	R31
    0141 0FE8      ADD	R30,R24

⌨️ 快捷键说明

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