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

📄 t0时钟.lst

📁 iccavr下
💻 LST
字号:
__text_start:
__start:
    0030 E5CF      LDI	R28,0x5F
    0031 E0D4      LDI	R29,4
    0032 BFCD      OUT	0x3D,R28
    0033 BFDE      OUT	0x3E,R29
    0034 51C0      SUBI	R28,0x10
    0035 40D0      SBCI	R29,0
    0036 EA0A      LDI	R16,0xAA
    0037 8308      STD	Y+0,R16
    0038 2400      CLR	R0
    0039 E6E0      LDI	R30,0x60
    003A E0F0      LDI	R31,0
    003B E010      LDI	R17,0
    003C 36E4      CPI	R30,0x64
    003D 07F1      CPC	R31,R17
    003E F011      BEQ	0x0041
    003F 9201      ST	R0,Z+
    0040 CFFB      RJMP	0x003C
    0041 8300      STD	Z+0,R16
    0042 E5EF      LDI	R30,0x5F
    0043 E0F0      LDI	R31,0
    0044 E6A0      LDI	R26,0x60
    0045 E0B0      LDI	R27,0
    0046 E010      LDI	R17,0
    0047 35EF      CPI	R30,0x5F
    0048 07F1      CPC	R31,R17
    0049 F021      BEQ	0x004E
    004A 95C8      LPM
    004B 9631      ADIW	R30,1
    004C 920D      ST	R0,X+
    004D CFF9      RJMP	0x0047
    004E 940E00CD  CALL	_main
_exit:
    0050 CFFF      RJMP	_exit
FILE: D:\M16开发板实验教程\icc-avr\T0CTCT~1\delay.h
(0001) #include<iom16v.h>
(0002) #include <macros.h>
(0003) 
(0004) /*-----------------------------------------------------------*/
(0005) /*-----------------------------------------------------------------------
(0006) 延时函数
(0007) 系统时钟:8M
(0008) -----------------------------------------------------------------------*/
(0009) void delay_1us(void)                 //1us延时函数
(0010)   {
(0011)    asm("nop");
_delay_1us:
    0051 0000      NOP
    0052 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    0053 940E0147  CALL	push_gset2
    0055 01B8      MOVW	R22,R16
(0012)   }
(0013) 
(0014) void delay_nus(unsigned int n)       //N us延时函数
(0015)   {
(0016)    unsigned int i=0;
    0056 2744      CLR	R20
    0057 2755      CLR	R21
(0017)    for (i=0;i<n;i++)
    0058 C003      RJMP	0x005C
(0018)    delay_1us();
    0059 DFF7      RCALL	_delay_1us
    005A 5F4F      SUBI	R20,0xFF
    005B 4F5F      SBCI	R21,0xFF
    005C 1746      CP	R20,R22
    005D 0757      CPC	R21,R23
    005E F3D0      BCS	0x0059
    005F 940E013E  CALL	pop_gset2
    0061 9508      RET
(0019)   }
(0020)   
(0021) void delay_1ms(void)                 //1ms延时函数
(0022)   {
(0023)    unsigned int i;
(0024)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    0062 2700      CLR	R16
    0063 2711      CLR	R17
    0064 C002      RJMP	0x0067
    0065 5F0F      SUBI	R16,0xFF
    0066 4F1F      SBCI	R17,0xFF
    0067 3704      CPI	R16,0x74
    0068 E0E4      LDI	R30,4
    0069 071E      CPC	R17,R30
    006A F3D0      BCS	0x0065
    006B 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    006C 940E0147  CALL	push_gset2
    006E 01B8      MOVW	R22,R16
(0025)   }
(0026)   
(0027) void delay_nms(unsigned int n)       //N ms延时函数
(0028)   {
(0029)    unsigned int i=0;
    006F 2744      CLR	R20
    0070 2755      CLR	R21
(0030)    for (i=0;i<n;i++)
    0071 C003      RJMP	0x0075
(0031)    delay_1ms();
    0072 DFEF      RCALL	_delay_1ms
    0073 5F4F      SUBI	R20,0xFF
    0074 4F5F      SBCI	R21,0xFF
    0075 1746      CP	R20,R22
    0076 0757      CPC	R21,R23
    0077 F3D0      BCS	0x0072
    0078 940E013E  CALL	pop_gset2
    007A 9508      RET
_display:
  number               --> R20
    007B 940E0149  CALL	push_gset1
    007D 01A8      MOVW	R20,R16
FILE: D:\M16开发板实验教程\icc-avr\T0CTCT~1\shumaguan.h
(0001) /* 
(0002)    this file is the head file 
(0003) */
(0004) 
(0005) 
(0006) #include<iom16v.h>
(0007) #include<macros.h>
(0008) #include"delay.h"
(0009) //macros.h 中有BIT(x)	(1 << (x))定义,  比如  BIT(5)相当于将第5位置1
(0010) 
(0011) const unsigned char discode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
(0012)                                0x82,0xf8,0x80,0x90,0xff}; //共阳数码管
(0013) /*--------------------------------------------------------*/
(0014)  //para  number: the number to be displayed
(0015) /*--------------------------------------------------------*/
(0016) void display(unsigned int number)
(0017) {
(0018)  	
(0019) 	
(0020) 	 	 
(0021)  	 PORTB &=~BIT(PORTB0);           //light the first bit of the shumaguan
    007E 98C0      CBI	0x18,0
(0022) 	                                 //PORTB0 was defined in iom16v.h
(0023)  	 PORTA=discode[number/1000];               //display the thousand bit    
    007F EE28      LDI	R18,0xE8
    0080 E033      LDI	R19,3
    0081 018A      MOVW	R16,R20
    0082 940E0124  CALL	div16u
    0084 01F8      MOVW	R30,R16
    0085 E584      LDI	R24,0x54
    0086 E090      LDI	R25,0
    0087 0FE8      ADD	R30,R24
    0088 1FF9      ADC	R31,R25
    0089 91E4      LPM	R30,0(Z)
    008A BBEB      OUT	0x1B,R30
(0024) 	 delay_nms(5);                           
    008B E005      LDI	R16,5
    008C E010      LDI	R17,0
    008D DFDE      RCALL	_delay_nms
(0025) 	 PORTB |=BIT(PORTB0);             //turn off the first bit of the shumaguan
    008E 9AC0      SBI	0x18,0
(0026)  	 
(0027) 	 PORTB &=~BIT(PORTB1);
    008F 98C1      CBI	0x18,1
(0028)  	 PORTA=discode[number/100%10];
    0090 E624      LDI	R18,0x64
    0091 E030      LDI	R19,0
    0092 018A      MOVW	R16,R20
    0093 940E0124  CALL	div16u
    0095 E02A      LDI	R18,0xA
    0096 E030      LDI	R19,0
    0097 940E0122  CALL	mod16u
    0099 01F8      MOVW	R30,R16
    009A E584      LDI	R24,0x54
    009B E090      LDI	R25,0
    009C 0FE8      ADD	R30,R24
    009D 1FF9      ADC	R31,R25
    009E 91E4      LPM	R30,0(Z)
    009F BBEB      OUT	0x1B,R30
(0029) 	 delay_nms(5);
    00A0 E005      LDI	R16,5
    00A1 E010      LDI	R17,0
    00A2 DFC9      RCALL	_delay_nms
(0030) 	 PORTB |=BIT(PORTB1);
    00A3 9AC1      SBI	0x18,1
(0031) 	 
(0032) 	 PORTB &=~BIT(PORTB2);
    00A4 98C2      CBI	0x18,2
(0033)  	 PORTA=discode[number%100/10];
    00A5 E624      LDI	R18,0x64
    00A6 E030      LDI	R19,0
    00A7 018A      MOVW	R16,R20
    00A8 940E0122  CALL	mod16u
    00AA E02A      LDI	R18,0xA
    00AB E030      LDI	R19,0
    00AC 940E0124  CALL	div16u
    00AE 01F8      MOVW	R30,R16
    00AF E584      LDI	R24,0x54
    00B0 E090      LDI	R25,0
    00B1 0FE8      ADD	R30,R24
    00B2 1FF9      ADC	R31,R25
    00B3 91E4      LPM	R30,0(Z)
    00B4 BBEB      OUT	0x1B,R30
(0034) 	 delay_nms(5);
    00B5 E005      LDI	R16,5
    00B6 E010      LDI	R17,0
    00B7 DFB4      RCALL	_delay_nms
(0035) 	 PORTB |=BIT(PORTB2);
    00B8 9AC2      SBI	0x18,2
(0036) 	 
(0037) 	 PORTB &=~BIT(PORTB3);
    00B9 98C3      CBI	0x18,3
(0038)  	 PORTA=discode[number%10];
    00BA E02A      LDI	R18,0xA
    00BB E030      LDI	R19,0
    00BC 018A      MOVW	R16,R20
    00BD 940E0122  CALL	mod16u
    00BF 01F8      MOVW	R30,R16
    00C0 E584      LDI	R24,0x54
    00C1 E090      LDI	R25,0
    00C2 0FE8      ADD	R30,R24
    00C3 1FF9      ADC	R31,R25
    00C4 91E4      LPM	R30,0(Z)
    00C5 BBEB      OUT	0x1B,R30
(0039) 	 delay_nms(5);
    00C6 E005      LDI	R16,5
    00C7 E010      LDI	R17,0
    00C8 DFA3      RCALL	_delay_nms
(0040) 	 PORTB |=BIT(PORTB3);
    00C9 9AC3      SBI	0x18,3
    00CA 940E014C  CALL	pop_gset1
    00CC 9508      RET
FILE: D:\M16开发板实验教程\icc-avr\T0CTCT~1\T0时钟.c
(0001) /* 
(0002)     Title:    icc-avr timer0 ctc timer
(0003)     Author:   dushibiao
(0004)     Date:     2007 10 18
(0005)     Purpose:  use timer0 ctc mode to generate a timer
(0006) 	Frequency: Ext 8M
(0007)     Software: icc-avr 
(0008)     Hardware: AVR mega16 BOARD
(0009)     Connect:  dushibiao@126.com
(0010) */
(0011) //内部8M晶振,T0  CTC方式   DUSHIBIAO 2007 7 7
(0012) 
(0013) #include<iom16v.h>
(0014) #include<macros.h>
(0015) #include "shumaguan.h"
(0016) #define uint unsigned int 
(0017) #define uchar unsigned char
(0018) 
(0019) uint micsec;                      //毫秒
(0020) uchar second, minute;   
(0021) 
(0022) void initial(void);
(0023) 
(0024) void main()
(0025) {
(0026)  	 initial();
_main:
  disvalue             --> R20
    00CD D00F      RCALL	_initial
    00CE C00C      RJMP	0x00DB
(0027) 	
(0028) 	 while(1)
(0029) 	 {
(0030) 	         unsigned int disvalue;
(0031) 			 disvalue=(unsigned int)minute*100+second;
    00CF 90200060  LDS	R2,minute
    00D1 E684      LDI	R24,0x64
    00D2 9D82      MUL	R24,R2
    00D3 01A0      MOVW	R20,R0
    00D4 90200061  LDS	R2,second
    00D6 2433      CLR	R3
    00D7 0D42      ADD	R20,R2
    00D8 1D53      ADC	R21,R3
(0032) 	  		 display(disvalue);
    00D9 018A      MOVW	R16,R20
    00DA DFA0      RCALL	_display
    00DB CFF3      RJMP	0x00CF
    00DC 9508      RET
(0033) 	 }
(0034) 	 
(0035) }
(0036) /*-------------------------------------------------------------
(0037) fuction:  initialize ports  and timer0 register
(0038) --------------------------------------------------------------*/
(0039) void initial(void)
(0040) {
(0041)   	 PORTA=0XFF;   //A口初始化
_initial:
    00DD EF8F      LDI	R24,0xFF
    00DE BB8B      OUT	0x1B,R24
(0042) 	 DDRA=0XFF;    //out
    00DF BB8A      OUT	0x1A,R24
(0043) 	 PORTB=0XFF;   //B口初始化
    00E0 BB88      OUT	0x18,R24
(0044) 	 DDRB=0XFF;
    00E1 BB87      OUT	0x17,R24
(0045) 	 PORTC=0XFF;   //其它口上拉电阻有效
    00E2 BB85      OUT	0x15,R24
(0046) 	 PORTD=0XFF;
    00E3 BB82      OUT	0x12,R24
(0047) 	 _SEI();
    00E4 9478      BSET	7
(0048) 	 OCR0=249;  //定时250us      ORC0+1							
    00E5 EF89      LDI	R24,0xF9
    00E6 BF8C      OUT	0x3C,R24
(0049) 	 TIMSK|=(1<<OCIE0);  //比较匹配中断允许
    00E7 B789      IN	R24,0x39
    00E8 6082      ORI	R24,2
    00E9 BF89      OUT	0x39,R24
(0050) 	 TCCR0|=(1<<WGM01)|(1<<CS01);  //CTC模式,8分频
    00EA B783      IN	R24,0x33
    00EB 608A      ORI	R24,0xA
    00EC BF83      OUT	0x33,R24
    00ED 9508      RET
_T0INT:
    00EE 922A      ST	R2,-Y
    00EF 923A      ST	R3,-Y
    00F0 938A      ST	R24,-Y
    00F1 939A      ST	R25,-Y
    00F2 93EA      ST	R30,-Y
    00F3 B62F      IN	R2,0x3F
    00F4 922A      ST	R2,-Y
(0051) 	 /*---------------------------------------------------------
(0052) 	 TCCR0
(0053) 	 7:     FOC0--------Force Output Campare
(0054) 	 6,3    WGM01:0-----Waveform Generator Mode
(0055) 	        00----------Normal
(0056) 			01----------PWM,Phase Correct
(0057) 			10----------CTC
(0058) 			11----------Fast PWM
(0059) 	 5,4    COM11:0-----Compare Match Output Mode
(0060) 	         ----------------------------------------
(0061) 			 Non PWM mode
(0062) 			 ----------------------------------------
(0063) 	        00----------Normal Port Operation, OC0 disconnected
(0064) 			01----------Toggle OC0 on compare match
(0065) 			10----------Clear OC0 on compare match
(0066) 			11----------Set OC0 on compare match
(0067) 	 2--0   CS02:0------Clock Select
(0068) 	        000---------None clock select
(0069) 			001---------clk(io)
(0070) 			010---------clk(io)/8
(0071) 			011---------clk(io)/64
(0072) 			100---------clk(io)/256
(0073) 			101---------clk(io)/1024
(0074) 			110---------T0 pin,falling edge
(0075) 			111---------T0 pin,rising edge
(0076) 	 ----------------------------------------------------------*/
(0077) }
(0078) 
(0079) /*------------------------------------------------------------
(0080) function:   interrupt service routine,it increases micsec,minute
(0081)             second , and the main loop routine display the current 
(0082) 			time 
(0083) -------------------------------------------------------------*/
(0084) 
(0085) #pragma interrupt_handler  T0INT: iv_TIMER0_COMP
(0086) void T0INT(void)
(0087) {
(0088)  		micsec += 1;
    00F5 91800062  LDS	R24,micsec
    00F7 91900063  LDS	R25,micsec+1
    00F9 9601      ADIW	R24,1
    00FA 93900063  STS	micsec+1,R25
    00FC 93800062  STS	micsec,R24
(0089) 		if(micsec==4000)
    00FE 3A80      CPI	R24,0xA0
    00FF E0EF      LDI	R30,0xF
    0100 079E      CPC	R25,R30
    0101 F4C1      BNE	0x011A
(0090) 		{
(0091) 			micsec=0;
    0102 2422      CLR	R2
    0103 2433      CLR	R3
    0104 92300063  STS	micsec+1,R3
    0106 92200062  STS	micsec,R2
(0092) 			second +=1 ;
    0108 91800061  LDS	R24,second
    010A 5F8F      SUBI	R24,0xFF
    010B 93800061  STS	second,R24
(0093) 			if(second==60)
    010D 338C      CPI	R24,0x3C
    010E F459      BNE	0x011A
(0094) 			{
(0095) 			 		second = 0;
    010F 92200061  STS	second,R2
(0096) 					minute += 1 ;
    0111 91800060  LDS	R24,minute
    0113 5F8F      SUBI	R24,0xFF
    0114 93800060  STS	minute,R24
(0097) 					if(minute==60)
    0116 338C      CPI	R24,0x3C
    0117 F411      BNE	0x011A
(0098) 					minute=0;
    0118 92200060  STS	minute,R2
(0099) 			}
(0100) 		}
FILE: <library>
    011A 9029      LD	R2,Y+
    011B BE2F      OUT	0x3F,R2
    011C 91E9      LD	R30,Y+
    011D 9199      LD	R25,Y+
    011E 9189      LD	R24,Y+
    011F 9039      LD	R3,Y+
    0120 9029      LD	R2,Y+
    0121 9518      RETI
mod16u:
    0122 9468      BSET	6
    0123 C001      RJMP	xdiv16u
div16u:
    0124 94E8      BCLR	6
xdiv16u:
    0125 92EA      ST	R14,-Y
    0126 92FA      ST	R15,-Y
    0127 938A      ST	R24,-Y
    0128 24EE      CLR	R14
    0129 24FF      CLR	R15
    012A E180      LDI	R24,0x10
    012B 0F00      LSL	R16
    012C 1F11      ROL	R17
    012D 1CEE      ROL	R14
    012E 1CFF      ROL	R15
    012F 16E2      CP	R14,R18
    0130 06F3      CPC	R15,R19
    0131 F018      BCS	0x0135
    0132 1AE2      SUB	R14,R18
    0133 0AF3      SBC	R15,R19
    0134 9503      INC	R16
    0135 958A      DEC	R24
    0136 F7A1      BNE	0x012B
    0137 F416      BRTC	0x013A
    0138 2D0E      MOV	R16,R14
    0139 2D1F      MOV	R17,R15
    013A 9189      LD	R24,Y+
    013B 90F9      LD	R15,Y+
    013C 90E9      LD	R14,Y+
    013D 9508      RET
pop_gset2:
    013E E0E2      LDI	R30,2
    013F 940C014D  JMP	pop
push_gset5:
    0141 92FA      ST	R15,-Y
    0142 92EA      ST	R14,-Y
push_gset4:
    0143 92DA      ST	R13,-Y
    0144 92CA      ST	R12,-Y
push_gset3:
    0145 92BA      ST	R11,-Y
    0146 92AA      ST	R10,-Y
push_gset2:
    0147 937A      ST	R23,-Y
    0148 936A      ST	R22,-Y
push_gset1:
    0149 935A      ST	R21,-Y
    014A 934A      ST	R20,-Y
    014B 9508      RET
pop_gset1:
    014C E0E1      LDI	R30,1
pop:
    014D 9149      LD	R20,Y+
    014E 9159      LD	R21,Y+
    014F FDE0      SBRC	R30,0
    0150 9508      RET
    0151 9169      LD	R22,Y+
    0152 9179      LD	R23,Y+
    0153 FDE1      SBRC	R30,1
    0154 9508      RET
    0155 90A9      LD	R10,Y+
    0156 90B9      LD	R11,Y+
    0157 FDE2      SBRC	R30,2
    0158 9508      RET
    0159 90C9      LD	R12,Y+
    015A 90D9      LD	R13,Y+
    015B FDE3      SBRC	R30,3
    015C 9508      RET
    015D 90E9      LD	R14,Y+
    015E 90F9      LD	R15,Y+
    015F 9508      RET

⌨️ 快捷键说明

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