📄 test_pc10_main.s
字号:
.module test_pc10_main.c
.area data(ram, con, rel)
_char_len::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile H:\m128_test\test_pc10_main.c
.dbsym e char_len _char_len c
_rob_angle::
.blkb 4
.area idata
.word 0x0,0x0
.area data(ram, con, rel)
.dbfile H:\m128_test\test_pc10_main.c
.dbsym e rob_angle _rob_angle D
_len_test::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile H:\m128_test\test_pc10_main.c
.dbsym e len_test _len_test I
.area text(rom, con, rel)
.dbfile H:\m128_test\test_pc10_main.c
.dbfunc e delay_1us _delay_1us fV
.even
_delay_1us::
.dbline -1
.dbline 48
; //ICC-AVR application builder : 2005-3-21 10:06:01
; // Target : M128
; // Crystal: 16.000Mhz
;
; #include <iom128v.h>
; #include <macros.h>
; #include <stdio.h>
;
;
;
; #define BUFF_SIZE 20
; #define EN_ADDR 7
; #define CLR_ADDR 6
; #define CH1 1
; #define CH2 2
; #define CH3 4
; #define DA1 8
; #define DA2 10
; #define LIGHT_CN 8
; #define OK 1
; #define PARAMETER_ERR 0
; #define HBYTE 1
; #define LBYTE 0
; #define CNT_BASE 0x270
; #define WRB_BASE 0x240
; #define FLIGHT_BASE 0x240
; #define GYRO_BASE 0x290
;
;
;
; union char_int{
; unsigned char half[2];
; unsigned int i1;
; };
; union char_int kk;
; unsigned char send_buffer[BUFF_SIZE]; //发宋缓冲区
; unsigned char rec0; // 接收到的字符
; unsigned char char_len=0;
; float rob_angle=0.0;
; int left,right;
; long len;
; int len_test=0;
; //SPI initialize
; // clock rate: 2000000hz
;
; //call this routine to initialize all peripherals
; void delay_1us(void) //1us延时函数
; {
.dbline 49
; asm("nop");
nop
.dbline 50
; asm("nop");
nop
.dbline 51
; asm("nop");
nop
.dbline 52
; asm("nop");
nop
.dbline -2
.dbline 53
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nus _delay_nus fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nus::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 56
;
; void delay_nus(unsigned int n) //N us延时函数
; {
.dbline 57
; unsigned int i=0;
clr R20
clr R21
.dbline 58
; for (i=0;i<n;i++)
xjmp L6
L3:
.dbline 59
xcall _delay_1us
L4:
.dbline 58
subi R20,255 ; offset = 1
sbci R21,255
L6:
.dbline 58
cp R20,R22
cpc R21,R23
brlo L3
.dbline -2
.dbline 60
; delay_1us();
; }
L2:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 63
;
; void delay_1ms(void) //1ms延时函数
; {
.dbline 65
clr R16
clr R17
xjmp L11
L8:
.dbline 65
L9:
.dbline 65
subi R16,255 ; offset = 1
sbci R17,255
L11:
.dbline 65
; unsigned int i;
; for (i=0;i<1716;i++);
cpi R16,180
ldi R30,6
cpc R17,R30
brlo L8
.dbline -2
.dbline 66
; }
L7:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nms::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 69
;
; void delay_nms(unsigned int n) //N ms延时函数
; {
.dbline 70
; unsigned int i=0;
clr R20
clr R21
.dbline 71
; for (i=0;i<n;i++)
xjmp L16
L13:
.dbline 72
xcall _delay_1ms
L14:
.dbline 71
subi R20,255 ; offset = 1
sbci R21,255
L16:
.dbline 71
cp R20,R22
cpc R21,R23
brlo L13
.dbline -2
.dbline 73
; delay_1ms();
; }
L12:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e uart0_init _uart0_init fV
.even
_uart0_init::
.dbline -1
.dbline 80
;
; //////////////////////////////////////////////////////////////////////////////////
; /////////////////////////////////////////////////////////////////////////////////
; /////////////////////串口UCSR0
; ////////////////////////////////////////////////////////////////////////////////
; void uart0_init(void)
; {
.dbline 81
; UCSR0B = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 82
; UCSR0A = 0x00;
out 0xb,R2
.dbline 83
; UCSR0C = 0x06;
ldi R24,6
sts 149,R24
.dbline 84
; UBRR0L = 0x67; //set baud rate lo
ldi R24,103
out 0x9,R24
.dbline 85
; UBRR0H = 0x00; //set baud rate hi
sts 144,R2
.dbline 86
; UCSR0B = 0x18;
ldi R24,24
out 0xa,R24
.dbline -2
.dbline 89
;
;
; }
L17:
.dbline 0 ; func end
ret
.dbend
.dbfunc e USART_Transmit _USART_Transmit fV
; data -> R16
.even
_USART_Transmit::
.dbline -1
.dbline 94
;
;
;
; void USART_Transmit( unsigned char data )
; {
L19:
.dbline 97
L20:
.dbline 97
;
;
; while ( !( UCSR0A & (1<<UDRE0)) );
sbis 0xb,5
rjmp L19
.dbline 99
;
; UDR0 = data;
out 0xc,R16
.dbline -2
.dbline 103
;
;
;
; }
L18:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.dbfunc e uart1_init _uart1_init fV
.even
_uart1_init::
.dbline -1
.dbline 108
; //////////////////////////////////////////////////////////////////////////////////
; /////////////////串口UCSR1
; ///////////////////////////////////////////////////////////////////////////////////
; void uart1_init(void)
; {
.dbline 109
; UCSR1B = 0x00; //disable while setting baud rate
clr R2
sts 154,R2
.dbline 110
; UCSR1A = 0x00;
sts 155,R2
.dbline 111
; UCSR1C = 0x06;
ldi R24,6
sts 157,R24
.dbline 112
; UBRR1L = 0x19; //set baud rate lo
ldi R24,25
sts 153,R24
.dbline 113
; UBRR1H = 0x00; //set baud rate hi
sts 152,R2
.dbline 114
; UCSR1B = 0x1C;
ldi R24,28
sts 154,R24
.dbline -2
.dbline 115
; }
L22:
.dbline 0 ; func end
ret
.dbend
.dbfunc e serial_send _serial_send fV
; i -> R20
; command -> R16
.even
_serial_send::
xcall push_gset1
.dbline -1
.dbline 120
;
;
;
;
; void serial_send(unsigned char command){
.dbline 121
; unsigned char i=0;
clr R20
xjmp L25
X0:
.dbline 122
; while( i < char_len){
L27:
.dbline 123
L28:
.dbline 123
; while ( !( UCSR1A & (1<<UDRE1)) );
lds R2,155
sbrs R2,5
rjmp L27
.dbline 124
; UCSR1B &= ~(1<<TXB81);
lds R24,154
andi R24,254
sts 154,R24
.dbline 125
; if ( command & 0x01 )
sbrs R16,0
rjmp L30
.dbline 126
; UCSR1B |= (1<<TXB81);
lds R24,154
ori R24,1
sts 154,R24
L30:
.dbline 127
ldi R24,<_send_buffer
ldi R25,>_send_buffer
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts 156,R2
.dbline 128
inc R20
.dbline 129
L25:
.dbline 122
lds R2,_char_len
cp R20,R2
brlo L28
.dbline 131
; UDR1 = send_buffer[i];
; i++;
; }
;
; char_len = 0 ;
clr R2
sts _char_len,R2
.dbline 132
; return;
.dbline -2
L23:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r command 16 c
.dbend
.dbfunc e scanf_int _scanf_int fI
; i -> R16
.even
_scanf_int::
.dbline -1
.dbline 137
; }
;
;
; int scanf_int(void)
; {
.dbline 138
; unsigned char i=0;
clr R16
xjmp L34
X1:
.dbline 140
;
; while( i < 2){
L36:
.dbline 141
L37:
.dbline 141
lds R2,155
sbrs R2,7
rjmp L36
.dbline 142
lds R2,154
sts _rec0,R2
.dbline 143
lds R2,156
sts _rec0,R2
.dbline 144
mov R2,R16
clr R3
ldi R30,1
ldi R31,0
sub R30,R2
sbc R31,R3
ldi R24,<_kk
ldi R25,>_kk
add R30,R24
adc R31,R25
lds R2,_rec0
std z+0,R2
.dbline 145
inc R16
.dbline 146
L34:
.dbline 140
cpi R16,2
brlo L37
.dbline 147
; while ( !(UCSR1A& (1<<RXC1)));
; rec0 = UCSR1B;
; rec0 = UDR1;
; kk.half[1 - i] = rec0;
; i++;
; }
; return kk.i1;
lds R16,_kk
lds R17,_kk+1
.dbline -2
L32:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e xy_set _xy_set fV
; address -> R20
; x -> R22
; y -> R10
; xy -> R20
.even
_xy_set::
xcall push_gset3
mov R20,R16
.dbline -1
.dbline 167
; }
; /*----------------------------------------------------------------------------
; 0x01 //清屏,AC自动加1,光标归位,但并不改变设置
; 0x02 //归位
; 0x06 //自动加一
; 0x04 //自动减一
; 0x0f //开显示,开光标,光标闪烁
; 0x0e //光标开
; 0x0d //光标所在字符闪烁
; 0x0c //光标关
; 0x18 //光标,字符一起左移
; 0x1c //光标,字符一起右移
; 0x38 //8位数据宽度
; LCD第一行显示寄存器地址:0X80-0X8f
; LCD第二行显示寄存器地址:0XC0-0Xcf
; LCD第三行显示寄存器地址:0x90-0x9f
; LCD第四行显示寄存器地址:0xd0-0xdf
; -----------------------------------------------------------------------------*/
; void xy_set(unsigned char xy)
; {
.dbline 169
; unsigned char x,y,address;
; x = xy;
mov R22,R20
.dbline 170
; x = x & 0x0f;
andi R22,15
.dbline 171
; y = xy;
mov R10,R20
.dbline 172
; y = y >> 4;
mov R24,R10
swap R24
andi R24,#0x0F
mov R10,R24
.dbline 174
;
; if (y == 0)
tst R24
brne L40
.dbline 175
; address = 0x80 + x;
mov R20,R22
subi R20,128 ; addi 128
xjmp L41
L40:
.dbline 176
; else if(y == 1)
mov R24,R10
cpi R24,1
brne L42
.dbline 177
; address = 0xc0 + x;
mov R20,R22
subi R20,64 ; addi 192
xjmp L43
L42:
.dbline 178
; else if(y == 2)
mov R24,R10
cpi R24,2
brne L44
.dbline 179
; address = 0x90 + x;
mov R20,R22
subi R20,112 ; addi 144
xjmp L45
L44:
.dbline 180
; else if(y == 3)
mov R24,R10
cpi R24,3
brne L46
.dbline 181
; address = 0xd0 + x;
mov R20,R22
subi R20,48 ; addi 208
L46:
L45:
L43:
L41:
.dbline 183
;
; send_buffer[0] = address;
sts _send_buffer,R20
.dbline 185
;
; char_len = 1;
ldi R24,1
sts _char_len,R24
.dbline 186
; serial_send(1);
ldi R16,1
xcall _serial_send
.dbline 187
; return ;
.dbline -2
L39:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r address 20 c
.dbsym r x 22 c
.dbsym r y 10 c
.dbsym r xy 20 c
.dbend
.dbfunc e init_lcd _init_lcd fV
.even
_init_lcd::
.dbline -1
.dbline 191
; }
;
; void init_lcd ()
; {
.dbline 192
; send_buffer[0] = 0x01;
ldi R24,1
sts _send_buffer,R24
.dbline 193
; char_len = 1;
sts _char_len,R24
.dbline 194
; serial_send(1);
ldi R16,1
.dbline 195
; return ;
.dbline -2
L48:
.dbline 0 ; func end
xjmp _serial_send
.dbend
.dbfunc e shift_r _shift_r fV
.even
_shift_r::
.dbline -1
.dbline 199
; }
;
; void shift_r()
; {
.dbline 200
; send_buffer[0] = 0x1c ;
ldi R24,28
sts _send_buffer,R24
.dbline 201
; char_len = 1;
ldi R24,1
sts _char_len,R24
.dbline 202
; serial_send(1);
ldi R16,1
.dbline 203
; return ;
.dbline -2
L49:
.dbline 0 ; func end
xjmp _serial_send
.dbend
.dbfunc e shift_l _shift_l fV
.even
_shift_l::
.dbline -1
.dbline 207
; }
;
; void shift_l()
; {
.dbline 208
; send_buffer[0] = 0x18;
ldi R24,24
sts _send_buffer,R24
.dbline 209
; char_len = 1;
ldi R24,1
sts _char_len,R24
.dbline 210
; serial_send(1);
ldi R16,1
.dbline 211
; return ;
.dbline -2
L50:
.dbline 0 ; func end
xjmp _serial_send
.dbend
.dbfunc e printf_char _printf_char fV
; s -> R20
.even
_printf_char::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 213
; }
; void printf_char(char s){
.dbline 215
;
; send_buffer[0] = s;
sts _send_buffer,R20
.dbline 216
; char_len = 1;
ldi R24,1
sts _char_len,R24
.dbline 217
; serial_send(0);
clr R16
xcall _serial_send
.dbline 218
; return ;
.dbline -2
L51:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r s 20 c
.dbend
.dbfunc e printf_hex _printf_hex fV
; temp -> R20,R21
; s -> R22
.even
_printf_hex::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 223
;
; }
;
;
; void printf_hex(unsigned char s){
.dbline 224
; unsigned int temp = 0;
clr R20
clr R21
.dbline 226
;
; temp = hextochar(s);
mov R16,R22
clr R17
xcall _hextochar
movw R20,R16
.dbline 227
; send_buffer[1] = temp;
sts _send_buffer+1,R20
.dbline 228
; temp = temp >> 8;
mov R20,R21
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -