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

📄 display.lst

📁 atmega8操作74hc164进行串口静态显示程序
💻 LST
字号:
__text_start:
__start:
    0013 E5CF      LDI	R28,0x5F
    0014 E0D4      LDI	R29,4
    0015 BFCD      OUT	P3D,R28
    0016 BFDE      OUT	P3E,R29
    0017 51C0      SUBI	R28,0x10
    0018 40D0      SBCI	R29,0
    0019 EA0A      LDI	R16,0xAA
    001A 8308      STD	R16,0+Y
    001B 2400      CLR	R0
    001C E6E0      LDI	R30,0x60
    001D E0F0      LDI	R31,0
    001E E010      LDI	R17,0
    001F 36E1      CPI	R30,0x61
    0020 07F1      CPC	R31,R17
    0021 F011      BEQ	0x0024
    0022 9201      ST	R0,Z+
    0023 CFFB      RJMP	0x001F
    0024 8300      STD	R16,0+Z
    0025 E2E6      LDI	R30,0x26
    0026 E0F0      LDI	R31,0
    0027 E6A0      LDI	R26,0x60
    0028 E0B0      LDI	R27,0
    0029 E010      LDI	R17,0
    002A 32E6      CPI	R30,0x26
    002B 07F1      CPC	R31,R17
    002C F021      BEQ	0x0031
    002D 95C8      LPM
    002E 9631      ADIW	R30,1
    002F 920D      ST	R0,X+
    0030 CFF9      RJMP	0x002A
    0031 D056      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: D:\job\avrtest\web\example\display\display.c
(0001) //ICC-AVR application builder : 2005-2-24 23:07:53
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) 
(0008) unsigned char  n;
(0009) 
(0010) //TIMER1 initialisation - prescale:256
(0011) // actual value:  1.000Hz (0.0%)
(0012) void timer1_init(void)
(0013) {
(0014)  TCCR1B = 0x00; //stop
_timer1_init:
    0033 2422      CLR	R2
    0034 BC2E      OUT	P2E,R2
(0015)  TCNT1H = 0x85; //setup
    0035 E885      LDI	R24,0x85
    0036 BD8D      OUT	P2D,R24
(0016)  TCNT1L = 0xEE;
    0037 EE8E      LDI	R24,0xEE
    0038 BD8C      OUT	P2C,R24
(0017)  OCR1AH = 0x7A;
    0039 E78A      LDI	R24,0x7A
    003A BD8B      OUT	P2B,R24
(0018)  OCR1AL = 0x12;
    003B E182      LDI	R24,0x12
    003C BD8A      OUT	P2A,R24
(0019)  OCR1BH = 0x7A;
    003D E78A      LDI	R24,0x7A
    003E BD89      OUT	P29,R24
(0020)  OCR1BL = 0x12;
    003F E182      LDI	R24,0x12
    0040 BD88      OUT	P28,R24
(0021)  ICR1H  = 0x7A;
    0041 E78A      LDI	R24,0x7A
    0042 BD87      OUT	P27,R24
(0022)  ICR1L  = 0x12;
    0043 E182      LDI	R24,0x12
    0044 BD86      OUT	P26,R24
(0023)  TCCR1A = 0x00;
    0045 BC2F      OUT	P2F,R2
(0024)  TCCR1B = 0x04; //start Timer
    0046 E084      LDI	R24,4
    0047 BD8E      OUT	P2E,R24
(0025) }
    0048 9508      RET
_timer1_ovf_isr:
  i                    --> R16
  ch                   --> R18
    0049 922A      ST	R2,-Y
    004A 930A      ST	R16,-Y
    004B 932A      ST	R18,-Y
    004C 938A      ST	R24,-Y
    004D 939A      ST	R25,-Y
    004E B62F      IN	R2,P3F
    004F 922A      ST	R2,-Y
(0026) 
(0027) //  timer1 中断 ,1秒
(0028) #pragma interrupt_handler timer1_ovf_isr:9
(0029) void timer1_ovf_isr(void)
(0030) {
(0031)     unsigned char  ch,i;
(0032) 
(0033)     TCNT1H = 0x85; //reload counter high value
    0050 E885      LDI	R24,0x85
    0051 BD8D      OUT	P2D,R24
(0034)     TCNT1L = 0xEE; //reload counter low value
    0052 EE8E      LDI	R24,0xEE
    0053 BD8C      OUT	P2C,R24
(0035) 
(0036)     if(++n == 10) n = 0;
    0054 91800060  LDS	R24,_n
    0056 5F8F      SUBI	R24,0xFF
    0057 2E28      MOV	R2,R24
    0058 92200060  STS	_n,R2
    005A 308A      CPI	R24,0xA
    005B F419      BNE	0x005F
    005C 2422      CLR	R2
    005D 92200060  STS	_n,R2
(0037)     ch = n | 0x70;
    005F 91200060  LDS	R18,_n
    0061 6720      ORI	R18,0x70
(0038)     PORTB &= ~0x01;      //  消隐
    0062 98C0      CBI	P18,0
(0039)     PORTD &= ~0x40;      //  CLK
    0063 9896      CBI	P12,6
(0040)     for(i=0; i<8; i++){
    0064 2700      CLR	R16
    0065 C00A      RJMP	0x0070
(0041)         if(ch & 0x80)
    0066 FF27      SBRS	R18,7
    0067 C002      RJMP	0x006A
(0042)             PORTD |= 0x80;
    0068 9A97      SBI	P12,7
    0069 C001      RJMP	0x006B
(0043)         else
(0044)             PORTD &= ~0x80;
    006A 9897      CBI	P12,7
(0045)         ch <<= 1;
    006B 0F22      LSL	R18
(0046)         PORTD |= 0x40;
    006C 9A96      SBI	P12,6
(0047)         asm("nop");
    006D 0000      NOP
(0048)         PORTD &= ~0x40;
    006E 9896      CBI	P12,6
    006F 9503      INC	R16
    0070 3008      CPI	R16,0x8
    0071 F3A0      BCS	0x0066
(0049)     }
(0050)     PORTB |= 0x01;      //  显示
    0072 9AC0      SBI	P18,0
(0051) }
    0073 9029      LD	R2,Y+
    0074 BE2F      OUT	P3F,R2
    0075 9199      LD	R25,Y+
    0076 9189      LD	R24,Y+
    0077 9129      LD	R18,Y+
    0078 9109      LD	R16,Y+
    0079 9029      LD	R2,Y+
    007A 9518      RETI
(0052) 
(0053) //  初始化
(0054) void init_devices(void)
(0055) {
(0056)  CLI();          //  禁止中断
_init_devices:
    007B 94F8      BCLR	7
(0057)  DDRB = 0x01;    //  初始化操作74LS164的管脚
    007C E081      LDI	R24,1
    007D BB87      OUT	P17,R24
(0058)  DDRD = 0xC0;    //  初始化操作74LS164的管脚
    007E EC80      LDI	R24,0xC0
    007F BB81      OUT	P11,R24
(0059)  timer1_init();
    0080 DFB2      RCALL	_timer1_init
(0060) 
(0061)  MCUCR = 0x00;
    0081 2422      CLR	R2
    0082 BE25      OUT	P35,R2
(0062)  GICR  = 0x00;
    0083 BE2B      OUT	P3B,R2
(0063)  TIMSK = 0x04;   //  设置timer1中断
    0084 E084      LDI	R24,4
    0085 BF89      OUT	P39,R24
(0064)  SEI();          //  中断使能
    0086 9478      BSET	7
(0065) }
    0087 9508      RET
(0066) 
(0067) //
(0068) void main(void)
(0069) {
(0070)  unsigned char   x;
(0071)  init_devices();
_main:
  x                    --> R20
    0088 DFF2      RCALL	_init_devices
(0072)  //insert your functional code here...
(0073)  for(;;){
(0074)    x++;
FILE: <library>
    0089 9543      INC	R20
    008A CFFE      RJMP	0x0089
    008B 9508      RET

⌨️ 快捷键说明

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