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

📄 mydesign.lst

📁 本设计以ATMEL公司生产的AT90S8515作为控制核心
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    007C E5CF      LDI	R28,0x5F
    007D E0D2      LDI	R29,2
    007E BFCD      OUT	0x3D,R28
    007F BFDE      OUT	0x3E,R29
    0080 51C0      SUBI	R28,0x10
    0081 40D0      SBCI	R29,0
    0082 EA0A      LDI	R16,0xAA
    0083 8308      STD	Y+0,R16
    0084 2400      CLR	R0
    0085 EFE7      LDI	R30,0xF7
    0086 E0F0      LDI	R31,0
    0087 E011      LDI	R17,1
    0088 30EE      CPI	R30,0xE
    0089 07F1      CPC	R31,R17
    008A F011      BEQ	0x008D
    008B 9201      ST	R0,Z+
    008C CFFB      RJMP	0x0088
    008D 8300      STD	Z+0,R16
    008E E6E0      LDI	R30,0x60
    008F E0F0      LDI	R31,0
    0090 E6A0      LDI	R26,0x60
    0091 E0B0      LDI	R27,0
    0092 E010      LDI	R17,0
    0093 3FE7      CPI	R30,0xF7
    0094 07F1      CPC	R31,R17
    0095 F021      BEQ	0x009A
    0096 95C8      LPM
    0097 9631      ADIW	R30,1
    0098 920D      ST	R0,X+
    0099 CFF9      RJMP	0x0093
    009A D245      RCALL	_main
_exit:
    009B CFFF      RJMP	_exit
FILE: D:\hujie\init.c
(0001) // init.c
(0002) // 
(0003) 
(0004) #include <io8515v.h>
(0005) #include <macros.h>
(0006) #include "1602LCD.h"
(0007) #include "PID.h"
(0008) #include "main.h"
(0009) 
(0010) // ADC寄存器
(0011) #define ADCCR (*(volatile unsigned char *) 0x4000)      // ADC控制器
(0012) #define ADCH  (*(volatile unsigned char *) 0x4001)      // 高4位寄存器
(0013) #define ADCL  (*(volatile unsigned char *) 0x4000)      // 低8位寄存器
(0014) // DAC寄存器
(0015) #define DAC1  (*(volatile unsigned char *) 0x8000)      // 通道1      
(0016) #define DAC2  (*(volatile unsigned char *) 0x8001) 		// 通道2
(0017) #define DAC3  (*(volatile unsigned char *) 0x8002)		// 通道3
(0018) #define DAC4  (*(volatile unsigned char *) 0x8003)		// 通道4
(0019) #define DACEN (*(volatile unsigned char *) 0xc000)      // 转换开始
(0020) 
(0021) //#define K0    32.76    // DAC转换系数
(0022) //#define K1    2.01      // ADC转换系数
(0023) 
(0024) // 端口初始化
(0025) void port_init(void)
(0026) {
(0027)     PORTA = 0xFF;
_port_init:
    009C EF8F      LDI	R24,0xFF
    009D BB8B      OUT	0x1B,R24
(0028)  	DDRA  = 0x00;
    009E 2422      CLR	R2
    009F BA2A      OUT	0x1A,R2
(0029)  	PORTB = 0xFF;
    00A0 BB88      OUT	0x18,R24
(0030)  	DDRB  = 0xFF;
    00A1 BB87      OUT	0x17,R24
(0031)  	PORTC = 0xFF;
    00A2 BB85      OUT	0x15,R24
(0032)  	DDRC  = 0x00;
    00A3 BA24      OUT	0x14,R2
(0033)  	PORTD = 0xFF;
    00A4 BB82      OUT	0x12,R24
(0034)  	DDRD  = 0x04; 
    00A5 E084      LDI	R24,4
    00A6 BB81      OUT	0x11,R24
(0035) }
    00A7 9508      RET
(0036) // TIMER0初始化 
(0037) void timer0_init(void)
(0038) {
(0039)     TCCR0 = 0x00; //stop timer
_timer0_init:
    00A8 2422      CLR	R2
    00A9 BE23      OUT	0x33,R2
(0040)  	TCNT0 = 0xD9; //set count value
    00AA ED89      LDI	R24,0xD9
    00AB BF82      OUT	0x32,R24
(0041)  	TCCR0 = 0x05; //start timer
    00AC E085      LDI	R24,5
    00AD BF83      OUT	0x33,R24
(0042) }
    00AE 9508      RET
(0043) // TIMER1初始化
(0044) void timer1_init(void)
(0045) {
(0046)  TCCR1A = 0x00;
_timer1_init:
    00AF 2422      CLR	R2
    00B0 BC2F      OUT	0x2F,R2
(0047)  TCCR1B = 0x00; //stop
    00B1 BC2E      OUT	0x2E,R2
(0048)  OCR1AH = 0x07;
    00B2 E087      LDI	R24,7
    00B3 BD8B      OUT	0x2B,R24
(0049)  OCR1AL = 0xD0;
    00B4 ED80      LDI	R24,0xD0
    00B5 BD8A      OUT	0x2A,R24
(0050)  OCR1BH = 0x07;
    00B6 E087      LDI	R24,7
    00B7 BD89      OUT	0x29,R24
(0051)  OCR1BL = 0xD0;
    00B8 ED80      LDI	R24,0xD0
    00B9 BD88      OUT	0x28,R24
(0052)  TCNT1H = 0xF8; //setup
    00BA EF88      LDI	R24,0xF8
    00BB BD8D      OUT	0x2D,R24
(0053)  TCNT1L = 0x30;
    00BC E380      LDI	R24,0x30
    00BD BD8C      OUT	0x2C,R24
(0054)  TCCR1B = 0x02; //start Timer
    00BE E082      LDI	R24,2
    00BF BD8E      OUT	0x2E,R24
(0055) }
    00C0 9508      RET
_data_init:
  i                    --> R20
  data                 --> R22
    00C1 DB85      RCALL	push_gset2
    00C2 2F60      MOV	R22,R16
    00C3 2F71      MOV	R23,R17
(0056) // 数据格式转换
(0057) void data_init(unsigned int data)
(0058) {
(0059)     int i;
(0060) 
(0061) 	for(i=4;i>=0;i--)
    00C4 E044      LDI	R20,4
    00C5 E050      LDI	R21,0
(0062) 	{
(0063) 		value_table[i]=data%10;
    00C6 E02A      LDI	R18,0xA
    00C7 E030      LDI	R19,0
    00C8 2F06      MOV	R16,R22
    00C9 2F17      MOV	R17,R23
    00CA DAD0      RCALL	mod16u
    00CB EF8C      LDI	R24,0xFC
    00CC E090      LDI	R25,0
    00CD 2FE4      MOV	R30,R20
    00CE 2FF5      MOV	R31,R21
    00CF 0FE8      ADD	R30,R24
    00D0 1FF9      ADC	R31,R25
    00D1 8300      STD	Z+0,R16
(0064)         data/=10; 
    00D2 E02A      LDI	R18,0xA
    00D3 E030      LDI	R19,0
    00D4 2F06      MOV	R16,R22
    00D5 2F17      MOV	R17,R23
    00D6 DAC6      RCALL	div16u
    00D7 2F60      MOV	R22,R16
    00D8 2F71      MOV	R23,R17
    00D9 5041      SUBI	R20,1
    00DA 4050      SBCI	R21,0
    00DB 3040      CPI	R20,0
    00DC E0E0      LDI	R30,0
    00DD 075E      CPC	R21,R30
    00DE F73C      BGE	0x00C6
(0065) 	}
(0066) }
    00DF DB48      RCALL	pop_gset2
    00E0 9508      RET
_init_devices:
    00E1 DB4E      RCALL	push_gset1
    00E2 9726      SBIW	R28,6
(0067) 
(0068) // 初始化
(0069) void init_devices(void)
(0070) {
(0071) 	CLI();
    00E3 94F8      BCLR	7
(0072)  	port_init();
    00E4 DFB7      RCALL	_port_init
(0073)  	timer0_init();
    00E5 DFC2      RCALL	_timer0_init
(0074) 	timer1_init();
    00E6 DFC8      RCALL	_timer1_init
(0075) 	LCD_init();
    00E7 D666      RCALL	_LCD_init
(0076) 	
(0077)  	MCUCR = 0xC2;                          // 外部SRAM访问
    00E8 EC82      LDI	R24,0xC2
    00E9 BF85      OUT	0x35,R24
(0078)  	GIMSK = 0x40;                          // INT0中断
    00EA E480      LDI	R24,0x40
    00EB BF8B      OUT	0x3B,R24
(0079)  	TIMSK = 0x82;                          // T/C0、T/C1中断
    00EC E882      LDI	R24,0x82
    00ED BF89      OUT	0x39,R24
(0080) 	
(0081) 	ADCCR=0x60;                            // 开启ADC 
    00EE E680      LDI	R24,0x60
    00EF 93804000  STS	0x4000,R24
(0082) 	ADCCR=0x40;                               
    00F1 E480      LDI	R24,0x40
    00F2 93804000  STS	0x4000,R24
(0083) 		
(0084) 	DAC1=0;                                // 开启DAC通道1 
    00F4 2422      CLR	R2
    00F5 92208000  STS	0x8000,R2
(0085) 	DAC2=0;                                // 开启DAC通道2 
    00F7 92208001  STS	0x8001,R2
(0086) 	DAC3=0;                                // 开启DAC通道3 
    00F9 92208002  STS	0x8002,R2
(0087) 	DAC4=DAC4_value;                       // 开启DAC通道4 
    00FB 90200082  LDS	R2,0x82
    00FD 92208003  STS	0x8003,R2
(0088) 	DACEN=0;                                 
    00FF 2422      CLR	R2
    0100 9220C000  STS	0xC000,R2
(0089) 
(0090) 	LCD_write_string(0,0,"O:0020 R:0000 mA");
    0102 E781      LDI	R24,0x71
    0103 E090      LDI	R25,0
    0104 8399      STD	Y+1,R25
    0105 8388      STD	Y+0,R24
    0106 2722      CLR	R18
    0107 2700      CLR	R16
    0108 D6F4      RCALL	_LCD_write_string
(0091)     LCD_write_string(0,1,"     ^ +/-ing...");
    0109 E680      LDI	R24,0x60
    010A E090      LDI	R25,0
    010B 8399      STD	Y+1,R25
    010C 8388      STD	Y+0,R24
    010D E021      LDI	R18,1
    010E 2700      CLR	R16
    010F D6ED      RCALL	_LCD_write_string
(0092) 	value=20;
    0110 E184      LDI	R24,0x14
    0111 E090      LDI	R25,0
    0112 9390010D  STS	_value+1,R25
    0114 9380010C  STS	_value,R24
(0093) 	ADC_GD=20*K1;
    0116 E206      LDI	R16,0x26
    0117 E010      LDI	R17,0
    0118 DB43      RCALL	lpm32
    0119 933A      ST	R19,-Y
    011A 932A      ST	R18,-Y
    011B 931A      ST	R17,-Y
    011C 930A      ST	R16,-Y
    011D 90400085  LDS	R4,0x85
    011F 90500086  LDS	R5,0x86
    0121 90200083  LDS	R2,0x83
    0123 90300084  LDS	R3,0x84
    0125 925A      ST	R5,-Y
    0126 924A      ST	R4,-Y
    0127 923A      ST	R3,-Y
    0128 922A      ST	R2,-Y
    0129 DD1A      RCALL	mpy32f
    012A 2FEC      MOV	R30,R28
    012B 2FFD      MOV	R31,R29
    012C 8302      STD	Z+2,R16
    012D 8313      STD	Z+3,R17
    012E 8324      STD	Z+4,R18
    012F 8335      STD	Z+5,R19
    0130 2FEC      MOV	R30,R28
    0131 2FFD      MOV	R31,R29
    0132 8022      LDD	R2,Z+2
    0133 8033      LDD	R3,Z+3
    0134 8044      LDD	R4,Z+4
    0135 8055      LDD	R5,Z+5
    0136 925A      ST	R5,-Y
    0137 924A      ST	R4,-Y
    0138 923A      ST	R3,-Y
    0139 922A      ST	R2,-Y
    013A E202      LDI	R16,0x22
    013B E010      LDI	R17,0
    013C DB1F      RCALL	lpm32
    013D 933A      ST	R19,-Y
    013E 932A      ST	R18,-Y
    013F 931A      ST	R17,-Y
    0140 930A      ST	R16,-Y
    0141 DCD1      RCALL	cmp32f
    0142 F0C4      BLT	0x015B
    0143 2FEC      MOV	R30,R28
    0144 2FFD      MOV	R31,R29
    0145 8022      LDD	R2,Z+2
    0146 8033      LDD	R3,Z+3
    0147 8044      LDD	R4,Z+4
    0148 8055      LDD	R5,Z+5
    0149 925A      ST	R5,-Y
    014A 924A      ST	R4,-Y
    014B 923A      ST	R3,-Y
    014C 922A      ST	R2,-Y
    014D E202      LDI	R16,0x22
    014E E010      LDI	R17,0
    014F DB0C      RCALL	lpm32
    0150 933A      ST	R19,-Y
    0151 932A      ST	R18,-Y
    0152 931A      ST	R17,-Y
    0153 930A      ST	R16,-Y
    0154 DC19      RCALL	sub32f
    0155 DB7E      RCALL	fp2int
    0156 2F40      MOV	R20,R16
    0157 2F51      MOV	R21,R17
    0158 5040      SUBI	R20,0
    0159 4850      SBCI	R21,0x80
    015A C009      RJMP	0x0164
    015B 2FEC      MOV	R30,R28
    015C 2FFD      MOV	R31,R29
    015D 8102      LDD	R16,Z+2
    015E 8113      LDD	R17,Z+3
    015F 8124      LDD	R18,Z+4
    0160 8135      LDD	R19,Z+5
    0161 DB72      RCALL	fp2int
    0162 2F40      MOV	R20,R16
    0163 2F51      MOV	R21,R17
    0164 93500109  STS	_ADC_GD+1,R21
    0166 93400108  STS	_ADC_GD,R20
(0094) 	DAC=7882;
    0168 EC8A      LDI	R24,0xCA
    0169 E19E      LDI	R25,0x1E
    016A 93900107  STS	_DAC+1,R25
    016C 93800106  STS	_DAC,R24
(0095) 	SEI();
    016E 9478      BSET	7
(0096) }
    016F 9626      ADIW	R28,6
    0170 DAC2      RCALL	pop_gset1
    0171 9508      RET
_int0_isr:
  jj                   --> R12
  ii                   --> R10
    0172 DAFD      RCALL	push_lset
    0173 DAD9      RCALL	push_gset4
(0097) // 读取ADC转换值 启动AD在PID运算后
(0098) #pragma interrupt_handler int0_isr:2
(0099) void int0_isr(void)
(0100) {
(0101)  	unsigned int ii;
(0102) 	unsigned int jj;
(0103)  //external interupt on INT0
(0104)     ii=ADCL;
    0174 90A04000  LDS	R10,0x4000
    0176 24BB      CLR	R11
(0105) 	delay_nus(1);
    0177 E001      LDI	R16,1
    0178 E010      LDI	R17,0
    0179 D6FA      RCALL	_delay_nus
(0106)     jj=ADCH;
    017A 90C04001  LDS	R12,0x4001
    017C 24DD      CLR	R13
(0107) 	ADC=jj;
    017D 92D0010B  STS	_ADC+1,R13
    017F 92C0010A  STS	_ADC,R12
(0108) 	ADC<<=8;
    0181 2C2C      MOV	R2,R12
    0182 2C3D      MOV	R3,R13
    0183 2C32      MOV	R3,R2
    0184 2422      CLR	R2
    0185 9230010B  STS	_ADC+1,R3
    0187 9220010A  STS	_ADC,R2
(0109) 	ADC|=ii;
    0189 282A      OR	R2,R10
    018A 283B      OR	R3,R11
    018B 9230010B  STS	_ADC+1,R3
    018D 9220010A  STS	_ADC,R2
(0110) 	arv_ADC+=(unsigned long)ADC;
    018F 2444      CLR	R4
    0190 2455      CLR	R5
    0191 9080008A  LDS	R8,0x8A
    0193 9090008B  LDS	R9,0x8B
    0195 90600088  LDS	R6,0x88
    0197 90700089  LDS	R7,0x89
    0199 0C62      ADD	R6,R2
    019A 1C73      ADC	R7,R3
    019B 1C84      ADC	R8,R4
    019C 1C95      ADC	R9,R5
    019D 92700089  STS	0x89,R7
    019F 92600088  STS	0x88,R6
    01A1 9290008B  STS	0x8B,R9
    01A3 9280008A  STS	0x8A,R8
(0111) 	arv_count++;
    01A5 E041      LDI	R20,1
    01A6 E050      LDI	R21,0
    01A7 E060      LDI	R22,0
    01A8 E070      LDI	R23,0
    01A9 9040008E  LDS	R4,0x8E
    01AB 9050008F  LDS	R5,0x8F
    01AD 9020008C  LDS	R2,0x8C
    01AF 9030008D  LDS	R3,0x8D
    01B1 0E24      ADD	R2,R20
    01B2 1E35      ADC	R3,R21
    01B3 1E46      ADC	R4,R22
    01B4 1E57      ADC	R5,R23
    01B5 9230008D  STS	0x8D,R3
    01B7 9220008C  STS	0x8C,R2
    01B9 9250008F  STS	0x8F,R5
    01BB 9240008E  STS	0x8E,R4
(0112) }
    01BD DA6E      RCALL	pop_gset4
    01BE DAC8      RCALL	pop_lset
    01BF 9518      RETI
_timer0_ovf_isr:
    01C0 DAAF      RCALL	push_lset
    01C1 DA85      RCALL	push_gset2
    01C2 9762      SBIW	R28,0x12
(0113) 
(0114) // 1s显示一次数据
(0115) #pragma interrupt_handler timer0_ovf_isr:8

⌨️ 快捷键说明

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