📄 output.lis
字号:
00AA ;
00AA ; //======================================================time0 初始化
00AA ; //TIMER0 initialisation - prescale:32
00AA ; // WGM: Normal
00AA ; // desired value: 1KHz
00AA ; // actual value: 1.000KHz (0.0%)
00AA ; void timer0_init(void){
00AA .dbline 87
00AA ; TCCR0 = 0x00; //stop
00AA 2224 clr R2
00AC 23BE out 0x33,R2
00AE .dbline 88
00AE ; ASSR = 0x00; //set async mode//同步方式,允许更新计数,比较输出,控制寄存器
00AE 20BE out 0x30,R2
00B0 .dbline 89
00B0 ; TCNT0 = 0x83; //set count
00B0 83E8 ldi R24,131
00B2 82BF out 0x32,R24
00B4 .dbline 90
00B4 ; OCR0 = 0x7D;
00B4 8DE7 ldi R24,125
00B6 81BF out 0x31,R24
00B8 .dbline 91
00B8 ; TCCR0 = 0x05; //start timer//128分频
00B8 85E0 ldi R24,5
00BA 83BF out 0x33,R24
00BC .dbline -2
00BC L8:
00BC .dbline 0 ; func end
00BC 0895 ret
00BE .dbend
.area vector(rom, abs)
.org 60
003C 0C945F00 jmp _timer0_comp_isr
.area text(rom, con, rel)
00BE .dbfile D:\excersize\output.c
00BE .dbfunc e timer0_comp_isr _timer0_comp_isr fV
.even
00BE _timer0_comp_isr::
00BE 8A93 st -y,R24
00C0 9A93 st -y,R25
00C2 8FB7 in R24,0x3f
00C4 8A93 st -y,R24
00C6 .dbline -1
00C6 .dbline 95
00C6 ; }
00C6 ; //======================================================time0 中断
00C6 ; #pragma interrupt_handler timer0_comp_isr:16
00C6 ; void timer0_comp_isr(void){
00C6 .dbline 96
00C6 ; TCNT0 = 0x83;
00C6 83E8 ldi R24,131
00C8 82BF out 0x32,R24
00CA .dbline 97
00CA ; T0Count0++;
00CA 80917500 lds R24,_T0Count0
00CE 90917600 lds R25,_T0Count0+1
00D2 0196 adiw R24,1
00D4 90937600 sts _T0Count0+1,R25
00D8 80937500 sts _T0Count0,R24
00DC .dbline -2
00DC L9:
00DC 8991 ld R24,y+
00DE 8FBF out 0x3f,R24
00E0 9991 ld R25,y+
00E2 8991 ld R24,y+
00E4 .dbline 0 ; func end
00E4 1895 reti
00E6 .dbend
00E6 .dbfunc e init_devices _init_devices fV
.even
00E6 _init_devices::
00E6 .dbline -1
00E6 .dbline 109
00E6 ; // T0Count1++;
00E6 ; // T0Count2++;
00E6 ; // T0Count3++;
00E6 ; // T0Count4++;
00E6 ; //compare occured TCNT0=OCR0
00E6 ; }
00E6 ; //======================================================速度中断处理函数
00E6 ;
00E6 ; //======================================================CPU初始化
00E6 ; //call this routine to initialise all peripherals
00E6 ; void init_devices(void)
00E6 ; {
00E6 .dbline 111
00E6 ; //stop errant interrupts until set up
00E6 ; CLI(); //disable all interrupts
00E6 F894 cli
00E8 .dbline 112
00E8 ; XDIV = 0x00; //xtal divider//系统时钟分频控制寄存器
00E8 2224 clr R2
00EA 2CBE out 0x3c,R2
00EC .dbline 113
00EC ; XMCRA = 0x0E; //external memory//外部存储器控制寄存器
00EC 8EE0 ldi R24,14
00EE 80936D00 sts 109,R24
00F2 .dbline 114
00F2 ; XMCRB = 0x80;
00F2 80E8 ldi R24,128
00F4 80936C00 sts 108,R24
00F8 .dbline 115
00F8 ; mapping_init();
00F8 83DF xcall _mapping_init
00FA .dbline 116
00FA ; port_init();
00FA 83DF xcall _port_init
00FC .dbline 119
00FC ; //watchdog_init();
00FC ; // timer1_init();
00FC ; timer0_init();
00FC D6DF xcall _timer0_init
00FE .dbline 123
00FE ;
00FE ; //adc_init();
00FE ;
00FE ; MCUCR = 0xC0;//MCU控制寄存器
00FE 80EC ldi R24,192
0100 85BF out 0x35,R24
0102 .dbline 124
0102 ; EICRA = 0x0A; //extended ext ints//外部中断控制寄存器
0102 8AE0 ldi R24,10
0104 80936A00 sts 106,R24
0108 .dbline 125
0108 ; EICRB = 0x0F; //extended ext ints
0108 8FE0 ldi R24,15
010A 8ABF out 0x3a,R24
010C .dbline 126
010C ; EIMSK = 0x33; //0x03 extended ext enable
010C 83E3 ldi R24,51
010E 89BF out 0x39,R24
0110 .dbline 127
0110 ; TIMSK = 0x12; //timer interrupt sources 01:time0
0110 82E1 ldi R24,18
0112 87BF out 0x37,R24
0114 .dbline 128
0114 ; ETIMSK = 0x00; //extended timer interrupt sources
0114 2224 clr R2
0116 20927D00 sts 125,R2
011A .dbline 129
011A ; uart0_init();
011A 92DF xcall _uart0_init
011C .dbline 130
011C ; SEI(); //re-enable interrupts
011C 7894 sei
011E .dbline -2
011E L10:
011E .dbline 0 ; func end
011E 0895 ret
0120 .dbend
0120 .dbfunc e WatchDog _WatchDog fV
.even
0120 _WatchDog::
0120 .dbline -1
0120 .dbline 135
0120 ; // MyselfCan0Addr=1;
0120 ; // MyselfCan1Addr=2;
0120 ; }
0120 ; //======================================================看门狗处理函数
0120 ; void WatchDog(void){
0120 .dbline 136
0120 ; DDRE|= 0x08;
0120 139A sbi 0x2,3
0122 .dbline 137
0122 ; PORTE&= 0xF7;
0122 83B1 in R24,0x3
0124 877F andi R24,247
0126 83B9 out 0x3,R24
0128 .dbline 138
0128 ; PORTE|= 0x08;
0128 1B9A sbi 0x3,3
012A .dbline 139
012A ; PORTE&= 0xF7;
012A 83B1 in R24,0x3
012C 877F andi R24,247
012E 83B9 out 0x3,R24
0130 .dbline 140
0130 ; PORTE|= 0x08;
0130 1B9A sbi 0x3,3
0132 .dbline 141
0132 ; PORTE&= 0xF7;
0132 83B1 in R24,0x3
0134 877F andi R24,247
0136 83B9 out 0x3,R24
0138 .dbline 142
0138 ; PORTE|= 0x08;
0138 1B9A sbi 0x3,3
013A .dbline 143
013A ; WDR();
013A A895 wdr
013C .dbline -2
013C L11:
013C .dbline 0 ; func end
013C 0895 ret
013E .dbend
013E .dbfunc e set_value _set_value fV
.even
013E _set_value::
013E .dbline -1
013E .dbline 149
013E ; }
013E ;
013E ;
013E ;
013E ; //===============================================初始设置
013E ; void set_value(void){
013E .dbline 153
013E ;
013E ; // V_average_incept.Word=0;
013E ; // Cr_average_incept.Word=0;
013E ; OutputByte0Reg = 255;
013E 8FEF ldi R24,255
0140 80930402 sts _OutputByte0Reg,R24
0144 .dbline 154
0144 ; OutputByte1Reg = 255;
0144 80930302 sts _OutputByte1Reg,R24
0148 .dbline 155
0148 ; OutputByte2Reg = 255;
0148 80930202 sts _OutputByte2Reg,R24
014C .dbline -2
014C L12:
014C .dbline 0 ; func end
014C 0895 ret
014E .dbend
014E .dbfunc e tx0_int_to_bcd _tx0_int_to_bcd fV
014E ; head -> R22
014E ; j -> R10
014E ; i -> R20,R21
.even
014E _tx0_int_to_bcd::
014E 0E940000 xcall push_gset3
0152 A801 movw R20,R16
0154 .dbline -1
0154 .dbline 162
0154 ; }
0154 ;
0154 ;
0154 ; //将int型变量转换为bcd码,并填充到TxBuffer0[]中
0154 ; /********************************************************************************/
0154 ; void tx0_int_to_bcd(int i)
0154 ; {
0154 .dbline 163
0154 ; UC j,head=0;
0154 6627 clr R22
0156 .dbline 164
0156 ; if(i<0){
0156 4030 cpi R20,0
0158 E0E0 ldi R30,0
015A 5E07 cpc R21,R30
015C 9CF4 brge L14
015E .dbline 164
015E .dbline 165
015E ; i=-i;
015E 4095 com R20
0160 5095 com R21
0162 4F5F subi R20,0xFF
0164 5F4F sbci R21,0xFF
0166 .dbline 166
0166 ; TxBuffer0[TxOperateSp0++]='-';
0166 20900001 lds R2,_TxOperateSp0
016A 3324 clr R3
016C 822D mov R24,R2
016E 8F5F subi R24,255 ; addi 1
0170 80930001 sts _TxOperateSp0,R24
0174 80E0 ldi R24,<_TxBuffer0
0176 90E0 ldi R25,>_TxBuffer0
0178 E22D mov R30,R2
017A FF27 clr R31
017C E80F add R30,R24
017E F91F adc R31,R25
0180 8DE2 ldi R24,45
0182 8083 std z+0,R24
0184 .dbline 167
0184 ; }
0184 L14:
0184 .dbline 168
0184 ; j=i/10000;i%=10000;if(j){TxBuffer0[TxOperateSp0++]=j+0x30;head=1;}
0184 20E1 ldi R18,10000
0186 37E2 ldi R19,39
0188 8A01 movw R16,R20
018A 0E940000 xcall div16s
018E A02E mov R10,R16
0190 .dbline 168
0190 20E1 ldi R18,10000
0192 37E2 ldi R19,39
0194 8A01 movw R16,R20
0196 0E940000 xcall mod16s
019A A801 movw R20,R16
019C .dbline 168
019C AA20 tst R10
019E 89F0 breq L16
01A0 .dbline 168
01A0 .dbline 168
01A0 20900001 lds R2,_TxOperateSp0
01A4 3324 clr R3
01A6 822D mov R24,R2
01A8 8F5F subi R24,255 ; addi 1
01AA 80930001 sts _TxOperateSp0,R24
01AE 80E0 ldi R24,<_TxBuffer0
01B0 90E0 ldi R25,>_TxBuffer0
01B2 E22D mov R30,R2
01B4 FF27 clr R31
01B6 E80F add R30,R24
01B8 F91F adc R31,R25
01BA 8A2D mov R24,R10
01BC 805D subi R24,208 ; addi 48
01BE 8083 std z+0,R24
01C0 .dbline 168
01C0 61E0 ldi R22,1
01C2 .dbline 168
01C2 L16:
01C2 .dbline 169
01C2 28EE ldi R18,1000
01C4 33E0 ldi R19,3
01C6 8A01 movw R16,R20
01C8 0E940000 xcall div16s
01CC A02E mov R10,R16
01CE .dbline 169
01CE 28EE ldi R18,1000
01D0 33E0 ldi R19,3
01D2 8A01 movw R16,R20
01D4 0E940000 xcall mod16s
01D8 A801 movw R20,R16
01DA .dbline 169
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -