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

📄 test.lst

📁 mega16_32实验板上的程序:mega16+74ls164+数码管或LED显示程序
💻 LST
字号:
__text_start:
__start:
      31 E5CF      LDI	R28,0x5F
      32 E0D4      LDI	R29,4
      33 BFCD      OUT	0x3D,R28
      34 BFDE      OUT	0x3E,R29
      35 51C0      SUBI	R28,0x10
      36 40D0      SBCI	R29,0
      37 EA0A      LDI	R16,0xAA
      38 8308      STD	Y+0,R16
      39 2400      CLR	R0
      3A E6EA      LDI	R30,0x6A
      3B E0F0      LDI	R31,0
      3C E010      LDI	R17,0
      3D 36EA      CPI	R30,0x6A
      3E 07F1      CPC	R31,R17
      3F F011      BEQ	0x0042
      40 9201      ST	R0,Z+
      41 CFFB      RJMP	0x003D
      42 8300      STD	Z+0,R16
      43 E5E8      LDI	R30,0x58
      44 E0F0      LDI	R31,0
      45 E6A0      LDI	R26,0x60
      46 E0B0      LDI	R27,0
      47 E010      LDI	R17,0
      48 E000      LDI	R16,0
      49 BF0B      OUT	0x3B,R16
      4A 36E2      CPI	R30,0x62
      4B 07F1      CPC	R31,R17
      4C F021      BEQ	0x0051
      4D 95C8      LPM
      4E 9631      ADIW	R30,1
      4F 920D      ST	R0,X+
      50 CFF9      RJMP	0x004A
      51 D06B      RCALL	_main
      52 0000      NOP
_exit:
      53 CFFF      RJMP	_exit
FILE: D:\mega16_32实验板资料\ICCAVR源程序\164\数码管\delay.h
(0001) /**********延时函数*****************/
(0002) /*-----------------------------------------------
(0003) delay_us	   :1us延时函数
(0004) ------------------------------------------------*/
(0005) void delay_1us(void)
(0006) {
(0007)  asm("nop");
_delay_1us:
      54 0000      NOP
      55 9508      RET
_delay_us:
  t                    --> R20
      56 934A      ST	R20,-Y
      57 935A      ST	R21,-Y
      58 01A8      MOVW	R20,R16
(0008) }
(0009) /*-----------------------------------------------
(0010) delay_nus          :长延时函数
(0011) 输入参数: t        :延时时间 us
(0012) ------------------------------------------------*/
(0013) void delay_us(unsigned int t)
(0014) {
      59 C001      RJMP	0x005B
(0015)  while(t--)
(0016)   delay_1us();
      5A DFF9      RCALL	_delay_1us
      5B 011A      MOVW	R2,R20
      5C 5041      SUBI	R20,1
      5D 4050      SBCI	R21,0
      5E 2022      TST	R2
      5F F7D1      BNE	0x005A
      60 2033      TST	R3
      61 F7C1      BNE	0x005A
      62 9159      LD	R21,Y+
      63 9149      LD	R20,Y+
      64 9508      RET
(0017) }
(0018) /*----------------------------------------------
(0019) delay_ms	   :1ms延时函数
(0020) -----------------------------------------------*/
(0021) void delay_1ms(void)
(0022) {
(0023)  unsigned int i;
(0024)  for(i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
      65 2700      CLR	R16
      66 2711      CLR	R17
      67 C002      RJMP	0x006A
      68 5F0F      SUBI	R16,0xFF
      69 4F1F      SBCI	R17,0xFF
      6A 3704      CPI	R16,0x74
      6B E0E4      LDI	R30,4
      6C 071E      CPC	R17,R30
      6D F3D0      BCS	0x0068
      6E 9508      RET
_delay_ms:
  t                    --> R20
      6F 934A      ST	R20,-Y
      70 935A      ST	R21,-Y
      71 01A8      MOVW	R20,R16
(0025) }
(0026) /*----------------------------------------------
(0027) delay_nms          :长延时函数
(0028) 输入参数: t        :延时时间 ms
(0029) -----------------------------------------------*/
(0030) void delay_ms(unsigned int t)
(0031) {
      72 C001      RJMP	0x0074
(0032)  while(t--)
(0033)   delay_1ms();
      73 DFF1      RCALL	_delay_1ms
      74 011A      MOVW	R2,R20
      75 5041      SUBI	R20,1
      76 4050      SBCI	R21,0
      77 2022      TST	R2
      78 F7D1      BNE	0x0073
      79 2033      TST	R3
      7A F7C1      BNE	0x0073
      7B 9159      LD	R21,Y+
      7C 9149      LD	R20,Y+
      7D 9508      RET
FILE: D:\mega16_32实验板资料\ICCAVR源程序\164\数码管\164.h
(0001) //定义LS164管脚和led控制脚
(0002) #define DDR_CLK    DDRA
(0003) #define DDR_DATA   DDRA
(0004) #define DDR_CLEAR  DDRA
(0005) #define DDR_SEL    DDRC
(0006) #define PORT_CLK   PORTA
(0007) #define PORT_DATA  PORTA
(0008) #define PORT_CLEAR PORTA
(0009) #define PORT_SEL   PORTC
(0010) #define CLK PA2
(0011) #define DATA PA4
(0012) #define CLEAR PA3
(0013) #define SEL 0x3C
(0014) 
(0015) unsigned char Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0016) 
(0017) void Init_164()
(0018) {
(0019)  DDR_CLK|=(1<<CLK);      //164的时钟,数据,清零
_Init_164:
      7E 9AD2      SBI	0x1A,2
(0020)  DDR_DATA|=(1<<DATA);
      7F 9AD4      SBI	0x1A,4
(0021)  DDR_CLEAR|=(1<<CLEAR);
      80 9AD3      SBI	0x1A,3
(0022)  DDR_SEL|=SEL;  //4位数码管选通端
      81 B384      IN	R24,0x14
      82 638C      ORI	R24,0x3C
      83 BB84      OUT	0x14,R24
      84 9508      RET
(0023) }
(0024) 
(0025) void Clear_164()
(0026) {
(0027)  PORT_CLEAR|=(1<<CLEAR); 
_Clear_164:
      85 9ADB      SBI	0x1B,3
      86 9508      RET
_write_164:
  n                    --> R20
  i                    --> R16
      87 934A      ST	R20,-Y
(0028) }
(0029) 
(0030) void write_164(unsigned char i)
(0031) {
(0032)   char n;
(0033)   for(n=8;n>0;n--) 
      88 E048      LDI	R20,0x8
      89 C00B      RJMP	0x0095
(0034)   {
(0035)    if(i&0x80) PORT_DATA|=(1<<DATA);
      8A FF07      SBRS	R16,7
      8B C002      RJMP	0x008E
      8C 9ADC      SBI	0x1B,4
      8D C001      RJMP	0x008F
(0036)    else   PORT_DATA&=~(1<<DATA);
      8E 98DC      CBI	0x1B,4
(0037)    NOP();
      8F 0000      NOP
(0038)    PORT_CLK|=(1<<CLK);
      90 9ADA      SBI	0x1B,2
(0039)    NOP();
      91 0000      NOP
(0040)    PORT_CLK&=~(1<<CLK);
      92 98DA      CBI	0x1B,2
(0041)    i=(i<<1);
      93 0F00      LSL	R16
      94 954A      DEC	R20
      95 E080      LDI	R24,0
      96 1784      CP	R24,R20
      97 F390      BCS	0x008A
      98 9149      LD	R20,Y+
      99 9508      RET
_write_LED:
  sel                  --> R22
  i                    --> R20
  p                    --> R10
      9A D039      RCALL	push_xgsetF00C
      9B 0000      NOP
      9C 0158      MOVW	R10,R16
(0042)   }   
(0043) }
(0044) void write_LED(unsigned char *p)
(0045) {
(0046)  unsigned char i,sel=0x04;
      9D E064      LDI	R22,4
(0047)   
(0048)  for(i=0;i<4;i++)
      9E 2744      CLR	R20
      9F C019      RJMP	0x00B9
(0049)  {
(0050)   write_164(Table[p[i]]);
      A0 2FE4      MOV	R30,R20
      A1 27FF      CLR	R31
      A2 0DEA      ADD	R30,R10
      A3 1DFB      ADC	R31,R11
      A4 81E0      LDD	R30,Z+0
      A5 27FF      CLR	R31
      A6 E680      LDI	R24,0x60
      A7 E090      LDI	R25,0
      A8 0FE8      ADD	R30,R24
      A9 1FF9      ADC	R31,R25
      AA 8100      LDD	R16,Z+0
      AB DFDB      RCALL	_write_164
(0051)   PORT_SEL&=(~sel);
      AC 2E26      MOV	R2,R22
      AD 9420      COM	R2
      AE B235      IN	R3,0x15
      AF 2032      AND	R3,R2
      B0 BA35      OUT	0x15,R3
(0052)   delay_ms(2);
      B1 E002      LDI	R16,2
      B2 E010      LDI	R17,0
      B3 DFBB      RCALL	_delay_ms
(0053)   PORT_SEL|=SEL;
      B4 B385      IN	R24,0x15
      B5 638C      ORI	R24,0x3C
      B6 BB85      OUT	0x15,R24
(0054)   sel=sel<<1;
      B7 0F66      LSL	R22
      B8 9543      INC	R20
      B9 3044      CPI	R20,4
      BA F328      BCS	0x00A0
      BB C01F      RJMP	pop_xgsetF00C
      BC 0000      NOP
_main:
  Date                 --> Y,+0
      BD 9724      SBIW	R28,4
FILE: D:\mega16_32实验板资料\ICCAVR源程序\164\数码管\164_test.c
(0001) //ICC-AVR application builder : 2008-11-11 16:14:49
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) 
(0008) #include "delay.h"
(0009) #include "164.h"
(0010) 
(0011) void main(void)
(0012) {
(0013)  unsigned char Date[4]={1,2,3,4};
      BE E584      LDI	R24,0x54
      BF E090      LDI	R25,0
      C0 01FE      MOVW	R30,R28
      C1 E004      LDI	R16,4
      C2 E010      LDI	R17,0
      C3 93FA      ST	R31,-Y
      C4 93EA      ST	R30,-Y
      C5 939A      ST	R25,-Y
      C6 938A      ST	R24,-Y
      C7 D01A      RCALL	asgncblk
      C8 0000      NOP
(0014)  delay_ms(20);
      C9 E104      LDI	R16,0x14
      CA E010      LDI	R17,0
      CB DFA3      RCALL	_delay_ms
(0015)  Init_164();
      CC DFB1      RCALL	_Init_164
(0016)  Clear_164();
      CD DFB7      RCALL	_Clear_164
      CE C002      RJMP	0x00D1
(0017)  while(1)
(0018)   write_LED(Date);   //显示1234*/
FILE: <library>
      CF 018E      MOVW	R16,R28
      D0 DFC9      RCALL	_write_LED
      D1 CFFD      RJMP	0x00CF
      D2 9624      ADIW	R28,4
      D3 9508      RET
push_xgsetF00C:
      D4 937A      ST	R23,-Y
      D5 936A      ST	R22,-Y
      D6 935A      ST	R21,-Y
      D7 934A      ST	R20,-Y
      D8 92BA      ST	R11,-Y
      D9 92AA      ST	R10,-Y
      DA 9508      RET
pop_xgsetF00C:
      DB 90A9      LD	R10,Y+
      DC 90B9      LD	R11,Y+
      DD 9149      LD	R20,Y+
      DE 9159      LD	R21,Y+
      DF 9169      LD	R22,Y+
      E0 9179      LD	R23,Y+
      E1 9508      RET
asgncblk:
      E2 93AA      ST	R26,-Y
      E3 93BA      ST	R27,-Y
      E4 93EA      ST	R30,-Y
      E5 93FA      ST	R31,-Y
      E6 920A      ST	R0,-Y
      E7 81AF      LDD	R26,Y+7
      E8 85B8      LDD	R27,Y+8
      E9 81ED      LDD	R30,Y+5
      EA 81FE      LDD	R31,Y+6
      EB 3000      CPI	R16,0
      EC 0701      CPC	R16,R17
      ED F031      BEQ	0x00F4
      EE 95C8      LPM
      EF 920D      ST	R0,X+
      F0 9631      ADIW	R30,1
      F1 5001      SUBI	R16,1
      F2 4010      SBCI	R17,0
      F3 CFF7      RJMP	0x00EB
      F4 9009      LD	R0,Y+
      F5 91F9      LD	R31,Y+
      F6 91E9      LD	R30,Y+
      F7 91B9      LD	R27,Y+
      F8 91A9      LD	R26,Y+
      F9 9624      ADIW	R28,4
      FA 9508      RET

⌨️ 快捷键说明

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