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

📄 ad2disp.lst

📁 用ICC编写的程序包括SPI
💻 LST
📖 第 1 页 / 共 3 页
字号:
__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 E6E8      LDI	R30,0x68
    003A E0F0      LDI	R31,0
    003B E010      LDI	R17,0
    003C 37EC      CPI	R30,0x7C
    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 E5E8      LDI	R30,0x58
    0043 E0F0      LDI	R31,0
    0044 E6A0      LDI	R26,0x60
    0045 E0B0      LDI	R27,0
    0046 E010      LDI	R17,0
    0047 36E0      CPI	R30,0x60
    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 940E00DB  CALL	_main
_exit:
    0050 CFFF      RJMP	_exit
_display:
  DispContent          --> R20
  i                    --> R22
  gate                 --> R10
  content              --> R12
    0051 940E0348  CALL	push_gset5
    0053 2EA2      MOV	R10,R18
    0054 0168      MOVW	R12,R16
FILE: F:\IccAvr_Pro\Display.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) 
(0004) #include "Display.h"
(0005) 
(0006) void display(unsigned int content,unsigned char gate)
(0007) {	 
(0008) 	unsigned int DispContent=0;
    0055 2744      CLR	R20
    0056 2755      CLR	R21
(0009) 	unsigned char i;
(0010) 	for(i=0;i<4;i++)		   			   			 //gain the BCD code of the number
    0057 2766      CLR	R22
    0058 C01C      RJMP	0x0075
(0011) 		{
(0012) 		 DispContent>>=4;
    0059 011A      MOVW	R2,R20
    005A 9436      LSR	R3
    005B 9427      ROR	R2
    005C 9436      LSR	R3
    005D 9427      ROR	R2
    005E 9436      LSR	R3
    005F 9427      ROR	R2
    0060 9436      LSR	R3
    0061 9427      ROR	R2
    0062 01A1      MOVW	R20,R2
(0013) 		 DispContent|=(content%10)<<12;
    0063 E02A      LDI	R18,0xA
    0064 E030      LDI	R19,0
    0065 0186      MOVW	R16,R12
    0066 940E0255  CALL	mod16u
    0068 E02C      LDI	R18,0xC
    0069 E030      LDI	R19,0
    006A 940E0371  CALL	lsl16
    006C 2B40      OR	R20,R16
    006D 2B51      OR	R21,R17
(0014) 		 content=content/10;
    006E E02A      LDI	R18,0xA
    006F E030      LDI	R19,0
    0070 0186      MOVW	R16,R12
    0071 940E0257  CALL	div16u
    0073 0168      MOVW	R12,R16
    0074 9563      INC	R22
    0075 3064      CPI	R22,4
    0076 F310      BCS	0x0059
(0015) 		 }
(0016) 	
(0017) 	 switch(gate)
    0077 2CEA      MOV	R14,R10
    0078 24FF      CLR	R15
    0079 20EE      TST	R14
    007A F411      BNE	0x007D
    007B 20FF      TST	R15
    007C F071      BEQ	0x008B
    007D 01C7      MOVW	R24,R14
    007E 3081      CPI	R24,1
    007F E0E0      LDI	R30,0
    0080 079E      CPC	R25,R30
    0081 F059      BEQ	0x008D
    0082 3082      CPI	R24,2
    0083 E0E0      LDI	R30,0
    0084 079E      CPC	R25,R30
    0085 F049      BEQ	0x008F
    0086 3083      CPI	R24,3
    0087 E0E0      LDI	R30,0
    0088 079E      CPC	R25,R30
    0089 F039      BEQ	0x0091
    008A C008      RJMP	0x0093
(0018) 	 	{
(0019) 		case 0: PORTB&=~BIT(Gate0);break;	  		 //Open the gate 
    008B 98C4      CBI	0x18,4
    008C C009      RJMP	0x0096
(0020) 		case 1: PORTB&=~BIT(Gate1);break;
    008D 98C5      CBI	0x18,5
    008E C007      RJMP	0x0096
(0021) 		case 2: PORTB&=~BIT(Gate2);break;
    008F 98C6      CBI	0x18,6
    0090 C005      RJMP	0x0096
(0022) 		case 3: PORTB&=~BIT(Gate3);break;
    0091 98C7      CBI	0x18,7
    0092 C003      RJMP	0x0096
(0023) 		default:  PORTB|=0xF0;break;
    0093 B388      IN	R24,0x18
    0094 6F80      ORI	R24,0xF0
    0095 BB88      OUT	0x18,R24
(0024) 		}
(0025) 		for (i=0;i<=15;i++)				 			 //Send the number by serial
    0096 2766      CLR	R22
    0097 C011      RJMP	0x00A9
(0026) 			{
(0027) 			 PORTC|=BIT(DispClk);
    0098 9AAE      SBI	0x15,6
(0028) 			 NOP();
    0099 0000      NOP
(0029) 			 NOP();
    009A 0000      NOP
(0030) 			 if(DispContent&0x01)
    009B FF40      SBRS	R20,0
    009C C002      RJMP	0x009F
(0031) 				 PORTC|=BIT(DispData);
    009D 9AAF      SBI	0x15,7
    009E C001      RJMP	0x00A0
(0032) 			 else
(0033) 			 	 PORTC&=~BIT(DispData);
    009F 98AF      CBI	0x15,7
(0034) 			 NOP();
    00A0 0000      NOP
(0035) 			 NOP();
    00A1 0000      NOP
(0036) 			 NOP();
    00A2 0000      NOP
(0037) 			 NOP();
    00A3 0000      NOP
(0038) 			 asm("clc");
    00A4 9488      BCLR	0
(0039) 			 DispContent>>=1;
    00A5 9556      LSR	R21
    00A6 9547      ROR	R20
(0040) 			 PORTC&=~BIT(DispClk);
    00A7 98AE      CBI	0x15,6
    00A8 9563      INC	R22
    00A9 E08F      LDI	R24,0xF
    00AA 1786      CP	R24,R22
    00AB F760      BCC	0x0098
(0041) 			 }
(0042) 		PORTB|=0xF0;
    00AC B388      IN	R24,0x18
    00AD 6F80      ORI	R24,0xF0
    00AE BB88      OUT	0x18,R24
(0043) }	 
    00AF 940E0322  CALL	pop_gset5
    00B1 9508      RET
(0044) 
(0045) void disp_init(void)			  	   				 //Set all control signal high
(0046) {
(0047)  	 DDRB|=0xFF;
_disp_init:
    00B2 B387      IN	R24,0x17
    00B3 6F8F      ORI	R24,0xFF
    00B4 BB87      OUT	0x17,R24
(0048) 	 PORTB|=0xF0;
    00B5 B388      IN	R24,0x18
    00B6 6F80      ORI	R24,0xF0
    00B7 BB88      OUT	0x18,R24
(0049) 	 PORTC|=BIT(DispData)|BIT(DispClk);
    00B8 B385      IN	R24,0x15
    00B9 6C80      ORI	R24,0xC0
    00BA BB85      OUT	0x15,R24
(0050) 	 DDRC|=BIT(DispData)|BIT(DispClk);
    00BB B384      IN	R24,0x14
    00BC 6C80      ORI	R24,0xC0
    00BD BB84      OUT	0x14,R24
(0051) }
    00BE 9508      RET
FILE: F:\IccAvr_Pro\Ad2disp.c
(0001) //ICC-AVR application builder : 2005-6-5 18:27:12
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) #include "time.h"
(0008) #include "Display.h"
(0009) #include "key.h"
(0010) #include "ADC.h"
(0011) 
(0012) extern const unsigned char ADChannel;
(0013) extern unsigned int AdValue[8];
(0014) extern unsigned char AdP;
(0015) extern unsigned char time_flag;
(0016) extern unsigned char keyflag[4];
(0017) extern unsigned char AdFlag;
(0018) extern unsigned char pwm;
(0019) 
(0020) unsigned char  Itrans[4]={0,241,100,88};
(0021) void port_init(void)
(0022) {
(0023)  PORTA = 0xFF;
_port_init:
    00BF EF8F      LDI	R24,0xFF
    00C0 BB8B      OUT	0x1B,R24
(0024)  DDRA  = 0x00;
    00C1 2422      CLR	R2
    00C2 BA2A      OUT	0x1A,R2
(0025)  PORTB = 0xFF;
    00C3 BB88      OUT	0x18,R24
(0026)  DDRB  = 0x00;
    00C4 BA27      OUT	0x17,R2
(0027)  PORTC = 0xFF; //m103 output only
    00C5 BB85      OUT	0x15,R24
(0028)  DDRC  = 0x00;
    00C6 BA24      OUT	0x14,R2
(0029)  PORTD = 0xFF;
    00C7 BB82      OUT	0x12,R24
(0030)  DDRD  = 0x00;
    00C8 BA21      OUT	0x11,R2
(0031) }
    00C9 9508      RET
(0032) 
(0033) 
(0034) 
(0035) 
(0036) //call this routine to initialise all peripherals
(0037) void init_devices(void)
(0038) {
(0039)  //stop errant interrupts until set up
(0040)  CLI(); //disable all interrupts
_init_devices:
    00CA 94F8      BCLR	7
(0041)  port_init();
    00CB DFF3      RCALL	_port_init
(0042)  timer1_init();
    00CC 940E018A  CALL	_timer1_init
(0043)  disp_init();
    00CE 940E00B2  CALL	_disp_init
(0044)  adc_init();
    00D0 940E01ED  CALL	_adc_init
(0045)  timer2_init();
    00D2 940E017E  CALL	_timer2_init
(0046)  
(0047) 
(0048)  MCUCR = 0x00;
    00D4 2422      CLR	R2
    00D5 BE25      OUT	0x35,R2
(0049)  GICR  = 0x00;
    00D6 BE2B      OUT	0x3B,R2
(0050)  TIMSK = 0x40; //timer interrupt sources
    00D7 E480      LDI	R24,0x40
    00D8 BF89      OUT	0x39,R24
(0051)  SEI(); //re-enable interrupts
    00D9 9478      BSET	7
(0052)  //all peripherals are now initialised
(0053) }
    00DA 9508      RET
_main:
  result               --> Y+0
  key                  --> R10
    00DB 9724      SBIW	R28,4
(0054) 
(0055) //
(0056) void main(void)
(0057) {
(0058)  unsigned char key=0;
    00DC 24AA      CLR	R10
(0059)  unsigned long result=0;
    00DD E040      LDI	R20,0
    00DE E050      LDI	R21,0
    00DF E060      LDI	R22,0
    00E0 E070      LDI	R23,0
    00E1 01FE      MOVW	R30,R28
    00E2 8340      STD	Z+0,R20
    00E3 8351      STD	Z+1,R21
    00E4 8362      STD	Z+2,R22
    00E5 8373      STD	Z+3,R23
(0060)  
(0061)  
(0062)  init_devices();
    00E6 DFE3      RCALL	_init_devices
    00E7 C087      RJMP	0x016F
(0063)  //insert your functional code here...
(0064)  while(1)
(0065)  {
(0066)   time_flag=0;
    00E8 2422      CLR	R2
    00E9 92200064  STS	0x64,R2
(0067)   AdFlag=0;
    00EB 92200067  STS	0x67,R2
(0068)  
(0069)  adc_start();
    00ED 940E0249  CALL	_adc_start
(0070)  
(0071)  while(!AdFlag);
    00EF 90200067  LDS	R2,0x67
    00F1 2022      TST	R2
    00F2 F3E1      BEQ	0x00EF
(0072)  pwm=(unsigned char)(AdValue[7]>>2);
    00F3 9020007A  LDS	R2,0x7A
    00F5 9030007B  LDS	R3,0x7B
    00F7 9436      LSR	R3
    00F8 9427      ROR	R2
    00F9 9436      LSR	R3
    00FA 9427      ROR	R2
    00FB 92200065  STS	0x65,R2
(0073)  pwm_change(pwm);
    00FD 2D02      MOV	R16,R2
    00FE 940E01A0  CALL	_pwm_change
(0074)  if(key)
    0100 20AA      TST	R10
    0101 F409      BNE	0x0103
    0102 C046      RJMP	0x0149
(0075)  	{
(0076) 	if(key==4)
    0103 2D8A      MOV	R24,R10
    0104 3084      CPI	R24,4
    0105 F451      BNE	0x0110
(0077) 		result=0;
    0106 E040      LDI	R20,0
    0107 E050      LDI	R21,0
    0108 E060      LDI	R22,0
    0109 E070      LDI	R23,0
    010A 01FE      MOVW	R30,R28
    010B 8340      STD	Z+0,R20
    010C 8351      STD	Z+1,R21
    010D 8362      STD	Z+2,R22
    010E 8373      STD	Z+3,R23
    010F C033      RJMP	0x0143
(0078) 	else
(0079) 		{
(0080) 		 result=(10*(long)AdValue[3]*Itrans[key])/AdValue[5];
    0110 E680      LDI	R24,0x60
    0111 E090      LDI	R25,0
    0112 2DEA      MOV	R30,R10
    0113 27FF      CLR	R31
    0114 0FE8      ADD	R30,R24
    0115 1FF9      ADC	R31,R25
    0116 8020      LDD	R2,Z+0
    0117 2433      CLR	R3
    0118 2444      CLR	R4
    0119 2455      CLR	R5
    011A 90600072  LDS	R6,0x72
    011C 90700073  LDS	R7,0x73
    011E 2488      CLR	R8
    011F 2499      CLR	R9
    0120 E04A      LDI	R20,0xA
    0121 E050      LDI	R21,0
    0122 E060      LDI	R22,0

⌨️ 快捷键说明

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