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

📄 1602lcd.lst

📁 1602lcd显示频率计 通过了proteus仿真
💻 LST
📖 第 1 页 / 共 2 页
字号:
     111 EC08      LDI	R16,0xC8
     112 E010      LDI	R17,0
     113 940E 00EC CALL	_delay_nms
(0044)  display_a_string(0,str1);  //显示“frequncy meter”
     115 E822      LDI	R18,0x82
     116 E030      LDI	R19,0
     117 2700      CLR	R16
     118 940E 00CB CALL	_display_a_string
(0045)   delay_nms(200);
     11A EC08      LDI	R16,0xC8
     11B E010      LDI	R17,0
     11C 940E 00EC CALL	_delay_nms
     11E C00A      RJMP	0x0129
(0046)  while(1)
(0047)  {
(0048)   hextoasc();    //十六进制转ASCII码
     11F D00B      RCALL	_hextoasc
(0049)   display_a_string(1,str2);
     120 E923      LDI	R18,0x93
     121 E030      LDI	R19,0
     122 E001      LDI	R16,1
     123 940E 00CB CALL	_display_a_string
(0050)   delay_nms(200);
     125 EC08      LDI	R16,0xC8
     126 E010      LDI	R17,0
     127 940E 00EC CALL	_delay_nms
     129 CFF5      RJMP	0x011F
     12A 9508      RET
(0051)  }
(0052) }
(0053) //十六进制转ASCII码,为LCD显示作准备
(0054) void hextoasc(void)    
(0055) {
(0056)  if(count>=1000)  //检测数值大于1000HZ,溢出
_hextoasc:
     12B 9180 00A5 LDS	R24,count
     12D 9190 00A6 LDS	R25,count+1
     12F 3E88      CPI	R24,0xE8
     130 E0E3      LDI	R30,3
     131 079E      CPC	R25,R30
     132 F058      BCS	0x013E
(0057)  {
(0058)   str2[6] ='O';   //显示"OVF"
     133 E48F      LDI	R24,0x4F
     134 9380 0099 STS	0x0099,R24
(0059)   str2[7] ='V';
     136 E586      LDI	R24,0x56
     137 9380 009A STS	0x009A,R24
(0060)   str2[8] ='F';
     139 E486      LDI	R24,0x46
     13A 9380 009B STS	0x009B,R24
(0061)   
(0062)   PORTC|=(1<<PC0);//PC0置1,发光管亮
     13C 9AA8      SBI	0x15,0
(0063)   
(0064)  }
     13D C029      RJMP	0x0167
(0065)  else
(0066)  {
(0067)   str2[6]=count/100+0x30;
     13E E624      LDI	R18,0x64
     13F E030      LDI	R19,0
     140 9100 00A5 LDS	R16,count
     142 9110 00A6 LDS	R17,count+1
     144 940E 01E1 CALL	div16u
     146 01C8      MOVW	R24,R16
     147 96C0      ADIW	R24,0x30
     148 9380 0099 STS	0x0099,R24
(0068)   str2[7]=count%100/10+0x30;
     14A E624      LDI	R18,0x64
     14B E030      LDI	R19,0
     14C 9100 00A5 LDS	R16,count
     14E 9110 00A6 LDS	R17,count+1
     150 940E 01DF CALL	mod16u
     152 E02A      LDI	R18,0xA
     153 E030      LDI	R19,0
     154 940E 01E1 CALL	div16u
     156 01C8      MOVW	R24,R16
     157 96C0      ADIW	R24,0x30
     158 9380 009A STS	0x009A,R24
(0069)   str2[8]=count%10+0x30;
     15A E02A      LDI	R18,0xA
     15B E030      LDI	R19,0
     15C 9100 00A5 LDS	R16,count
     15E 9110 00A6 LDS	R17,count+1
     160 940E 01DF CALL	mod16u
     162 01C8      MOVW	R24,R16
     163 96C0      ADIW	R24,0x30
     164 9380 009B STS	0x009B,R24
(0070)   PORTC&=~(1<<PC0);    //PC0清0,发光管灭
     166 98A8      CBI	0x15,0
(0071)   }
     167 9508      RET
(0072) } 
(0073)  
(0074)  void port_init(void)
(0075) {
(0076)  PORTA = 0x00;
_port_init:
     168 2422      CLR	R2
     169 BA2B      OUT	0x1B,R2
(0077)  DDRA  = 0xFF;
     16A EF8F      LDI	R24,0xFF
     16B BB8A      OUT	0x1A,R24
(0078)  PORTB = 0x01;
     16C E081      LDI	R24,1
     16D BB88      OUT	0x18,R24
(0079)  DDRB  = 0xFE;
     16E EF8E      LDI	R24,0xFE
     16F BB87      OUT	0x17,R24
(0080)  PORTC = 0x00; //m103 output only
     170 BA25      OUT	0x15,R2
(0081)  DDRC  = 0x01;
     171 E081      LDI	R24,1
     172 BB84      OUT	0x14,R24
(0082)  PORTD = 0xff;
     173 EF8F      LDI	R24,0xFF
     174 BB82      OUT	0x12,R24
(0083)  DDRD  = 0x00;
     175 BA21      OUT	0x11,R2
(0084)  
(0085)  lcd_data_port=0xff;
     176 BB82      OUT	0x12,R24
(0086)  lcd_data_ddr=0xff;
     177 BB81      OUT	0x11,R24
(0087)  lcd_control_port=0x07;
     178 E087      LDI	R24,7
     179 BB8B      OUT	0x1B,R24
(0088)  lcd_control_ddr=0x07;
     17A BB8A      OUT	0x1A,R24
     17B 9508      RET
(0089) }
(0090) 
(0091) //TIMER1 initialize - prescale:64
(0092) // WGM: 0) Normal, TOP=0xFFFF
(0093) // desired value: 1Hz
(0094) // actual value:  1.000Hz (0.0%)
(0095) void timer1_init(void)
(0096) {
(0097)  TCCR1B = 0x00; //stop
_timer1_init:
     17C 2422      CLR	R2
     17D BC2E      OUT	0x2E,R2
(0098)  TCNT1H = 0x0B; //setup
     17E E08B      LDI	R24,0xB
     17F BD8D      OUT	0x2D,R24
(0099)  TCNT1L = 0xDC;
     180 ED8C      LDI	R24,0xDC
     181 BD8C      OUT	0x2C,R24
(0100) 
(0101)  TCCR1A = 0x00;
     182 BC2F      OUT	0x2F,R2
(0102)  TCCR1B = 0x03; //start Timer
     183 E083      LDI	R24,3
     184 BD8E      OUT	0x2E,R24
     185 9508      RET
(0103) }
(0104) 
(0105) void init_devices(void)
(0106) {
(0107)  //stop errant interrupts until set up
(0108)  CLI(); //disable all interrupts
_init_devices:
     186 94F8      BCLR	7
(0109)  port_init();
     187 DFE0      RCALL	_port_init
(0110)  timer1_init();
     188 DFF3      RCALL	_timer1_init
(0111)  TCCR0=0x06;
     189 E086      LDI	R24,6
     18A BF83      OUT	0x33,R24
(0112)  TCNT0=0x00;
     18B 2422      CLR	R2
     18C BE22      OUT	0x32,R2
(0113)  
(0114)  count=0x00;
     18D 2433      CLR	R3
     18E 9230 00A6 STS	count+1,R3
     190 9220 00A5 STS	count,R2
(0115)  tim0_ovf_count=0x00;
     192 9220 00A4 STS	tim0_ovf_count,R2
(0116)  timer1_init();
     194 DFE7      RCALL	_timer1_init
(0117)  
(0118)  lcd_init();
     195 940E 006F CALL	_lcd_init
(0119)  
(0120)  MCUCR = 0x00;
     197 2422      CLR	R2
     198 BE25      OUT	0x35,R2
(0121)  GICR  = 0x00;
     199 BE2B      OUT	0x3B,R2
(0122)  TIMSK = 0x05; //timer interrupt sources
     19A E085      LDI	R24,5
     19B BF89      OUT	0x39,R24
(0123)  SEI(); //re-enable interrupts
     19C 9478      BSET	7
     19D 9508      RET
_timer0_ovf_isr:
     19E 922A      ST	R2,-Y
     19F 938A      ST	R24,-Y
     1A0 939A      ST	R25,-Y
     1A1 B62F      IN	R2,0x3F
     1A2 922A      ST	R2,-Y
(0124) }
(0125) 
(0126) #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
(0127) void timer0_ovf_isr(void)
(0128) {
(0129)  TCNT0 = 0x00 /*INVALID SETTING*/; //reload counter value
     1A3 2422      CLR	R2
     1A4 BE22      OUT	0x32,R2
(0130)  tim0_ovf_count++;
     1A5 9180 00A4 LDS	R24,tim0_ovf_count
     1A7 5F8F      SUBI	R24,0xFF
     1A8 9380 00A4 STS	tim0_ovf_count,R24
     1AA 9029      LD	R2,Y+
     1AB BE2F      OUT	0x3F,R2
     1AC 9199      LD	R25,Y+
     1AD 9189      LD	R24,Y+
     1AE 9029      LD	R2,Y+
     1AF 9518      RETI
_timer1_ovf_isr:
     1B0 922A      ST	R2,-Y
     1B1 923A      ST	R3,-Y
     1B2 924A      ST	R4,-Y
     1B3 925A      ST	R5,-Y
     1B4 930A      ST	R16,-Y
     1B5 931A      ST	R17,-Y
     1B6 932A      ST	R18,-Y
     1B7 933A      ST	R19,-Y
     1B8 938A      ST	R24,-Y
     1B9 B62F      IN	R2,0x3F
     1BA 922A      ST	R2,-Y
(0131) }
(0132) 
(0133) 
(0134) 
(0135) #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
(0136) void timer1_ovf_isr(void)
(0137) {
(0138)  //TIMER1 has overflowed
(0139)  TCNT1H = 0x0B; //reload counter high value
     1BB E08B      LDI	R24,0xB
     1BC BD8D      OUT	0x2D,R24
(0140)  TCNT1L = 0xDC; //reload counter low value
     1BD ED8C      LDI	R24,0xDC
     1BE BD8C      OUT	0x2C,R24
(0141)  count=tim0_ovf_count*256+TCNT0;
     1BF 9120 00A4 LDS	R18,tim0_ovf_count
     1C1 2733      CLR	R19
     1C2 E000      LDI	R16,0
     1C3 E011      LDI	R17,1
     1C4 940E 01FB CALL	empy16s
     1C6 0118      MOVW	R2,R16
     1C7 B642      IN	R4,0x32
     1C8 2455      CLR	R5
     1C9 0C24      ADD	R2,R4
     1CA 1C35      ADC	R3,R5
     1CB 9230 00A6 STS	count+1,R3
     1CD 9220 00A5 STS	count,R2
(0142)  tim0_ovf_count=0x00;
     1CF 2422      CLR	R2
     1D0 9220 00A4 STS	tim0_ovf_count,R2
(0143)  TCNT0=0x00;
FILE: <library>
     1D2 BE22      OUT	0x32,R2
     1D3 9029      LD	R2,Y+
     1D4 BE2F      OUT	0x3F,R2
     1D5 9189      LD	R24,Y+
     1D6 9139      LD	R19,Y+
     1D7 9129      LD	R18,Y+
     1D8 9119      LD	R17,Y+
     1D9 9109      LD	R16,Y+
     1DA 9059      LD	R5,Y+
     1DB 9049      LD	R4,Y+
     1DC 9039      LD	R3,Y+
     1DD 9029      LD	R2,Y+
     1DE 9518      RETI
mod16u:
     1DF 9468      BSET	6
     1E0 C001      RJMP	xdiv16u
div16u:
     1E1 94E8      BCLR	6
xdiv16u:
     1E2 92EA      ST	R14,-Y
     1E3 92FA      ST	R15,-Y
     1E4 938A      ST	R24,-Y
     1E5 24EE      CLR	R14
     1E6 24FF      CLR	R15
     1E7 E180      LDI	R24,0x10
     1E8 0F00      LSL	R16
     1E9 1F11      ROL	R17
     1EA 1CEE      ROL	R14
     1EB 1CFF      ROL	R15
     1EC 16E2      CP	R14,R18
     1ED 06F3      CPC	R15,R19
     1EE F018      BCS	0x01F2
     1EF 1AE2      SUB	R14,R18
     1F0 0AF3      SBC	R15,R19
     1F1 9503      INC	R16
     1F2 958A      DEC	R24
     1F3 F7A1      BNE	0x01E8
     1F4 F416      BRTC	0x01F7
     1F5 2D0E      MOV	R16,R14
     1F6 2D1F      MOV	R17,R15
     1F7 9189      LD	R24,Y+
     1F8 90F9      LD	R15,Y+
     1F9 90E9      LD	R14,Y+
     1FA 9508      RET
empy16s:
     1FB 920A      ST	R0,-Y
     1FC 921A      ST	R1,-Y
     1FD 938A      ST	R24,-Y
     1FE 939A      ST	R25,-Y
     1FF 9F02      MUL	R16,R18
     200 01C0      MOVW	R24,R0
     201 9F12      MUL	R17,R18
     202 0D90      ADD	R25,R0
     203 9F03      MUL	R16,R19
     204 0D90      ADD	R25,R0
     205 018C      MOVW	R16,R24
     206 9199      LD	R25,Y+
     207 9189      LD	R24,Y+
     208 9019      LD	R1,Y+
     209 9009      LD	R0,Y+
     20A 9508      RET
push_xgset300C:
     20B 935A      ST	R21,-Y
     20C 934A      ST	R20,-Y
     20D 92BA      ST	R11,-Y
     20E 92AA      ST	R10,-Y
     20F 9508      RET
pop_xgset300C:
     210 90A9      LD	R10,Y+
     211 90B9      LD	R11,Y+
     212 9149      LD	R20,Y+
     213 9159      LD	R21,Y+
     214 9508      RET
push_xgsetF00C:
     215 937A      ST	R23,-Y
     216 936A      ST	R22,-Y
     217 935A      ST	R21,-Y
     218 934A      ST	R20,-Y
     219 92BA      ST	R11,-Y
     21A 92AA      ST	R10,-Y
     21B 9508      RET
pop_xgsetF00C:
     21C 90A9      LD	R10,Y+
     21D 90B9      LD	R11,Y+
     21E 9149      LD	R20,Y+
     21F 9159      LD	R21,Y+
     220 9169      LD	R22,Y+
     221 9179      LD	R23,Y+
     222 9508      RET

⌨️ 快捷键说明

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