📄 jianpan.s
字号:
.module jianpan.c
.area lit(rom, con, rel)
_KeySet::
.byte 1,2
.byte 3,4
.byte 5,6
.byte 7,8
.byte 9,0
.byte 10,11
.byte 12,13
.byte 14,15
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e KeySet _KeySet A[16:16]kc
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
_flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e flag _flag c
.area lit(rom, con, rel)
_num_table::
.byte 63,6
.byte 91,'O
.byte 'f,'m
.byte 125,7
.byte 127,'o
.byte 64
.dbsym e num_table _num_table A[11:11]kc
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
_DelayCounter::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e DelayCounter _DelayCounter i
_SysCounter::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e SysCounter _SysCounter i
_numL::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e numL _numL i
_numH::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e numH _numH c
_mode::
.blkb 1
.area idata
.byte 113
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e mode _mode c
_NumBitL::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e NumBitL _NumBitL c
_NumBitH::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e NumBitH _NumBitH c
_Cursor::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e Cursor _Cursor c
_CursorDir::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbsym e CursorDir _CursorDir c
.area text(rom, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbfunc e delay _delay fV
; time -> R16,R17
.even
_delay::
.dbline -1
.dbline 92
; //ICC-AVR application builder : 2004-4-28 13:15:44
; // Target : M16
; // Crystal: 8.0000Mhz
; //串口通讯及控制命令格式(协议)如下:
; // 命令的传输长度采用变长数据,第一个字节为指令,其余为可选参数
; //----------------------------------------------------------------------------
; //键盘特殊功能键定义如下:
; //
; //键码 功能
; //-----------------------------------
; // F ENTER(transmit the data to the master)
; // C BACKSPACE
; // A speedup
; // B slowdown
; // E go into the edit mode
; //
; #include <iom16v.h>
; #include <macros.h>
;
; #define uchar unsigned char
; #define uint unsigned int
; #define ulong unsigned long
;
; #define ROUTE_TASK_NUM_LIMIT 30
; #define SET_ROUTE ( PIND & BIT(PD3) ) //键盘设定路径的选通引脚(来自Mega16)
;
; //功能键定义
; #define CANCEL 12 //C
; #define ENTER 15 //F
; #define EDIT 14 //e
; #define speedup 10 //A
; #define slowdown 11 //B
; #define DEBUG 13 //D
;
; //模式1参数个数Model1_flag
; #define Model1_flag 8
; //模式2参数个数Model2_flag
; #define Model2_flag 4
;
; //状态标志
; #define START_COMMAND 0xF0
; #define TRANSMIT 0x02
; #define SAVE 0x00
; #define SETTING 0x01
; #define FREE 0X71
; #define STATE 0X0f
;
; #define PAR1 0x01
; #define PAR2 0x02
; #define PAR3 0x03
; #define PAR4 0x04
; #define PAR5 0x05
; #define PAR6 0x06
; #define PAR7 0x07
; #define PAR8 0x08
; #define PAR9 0x09
; #define PAR10 0x0a
; const uchar KeySet[] =
; {
; 1, 2, 3, 4,
; 5, 6, 7, 8,
; 9, 0, 10,11,
; 12,13,14,15
; };
;
; uchar flag = 0; /* 状态标志变量 */
; const uchar num_table[] = { 0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x40 };
; //自定义定时器
; uint DelayCounter = 0;
; uint SysCounter = 0;
; //
; uchar trans_buf[20];
; uchar receive_buf[20];
;
; //键盘控制行为变量
; uint numL= 0; //6位十进制
; uchar numH=0; //显示高2位
;
; uchar mode = 0x71; //显示'F'
; uchar NumBitL=0; //显示高2位
; uchar NumBitH=0; //6位十进制 显示低6位
; uchar Cursor = 0;
; uchar CursorDir = 0;
;
; void delay( uint time );
; //void master( uchar command, uchar* buf, uchar startP, uchar dataLen );
; uchar scan_key( void );
; void display( void );
;
;
; void delay( uint time )
; {
.dbline 93
clr R2
clr R3
sts _DelayCounter+1,R3
sts _DelayCounter,R2
xjmp L5
L2:
.dbline 93
.dbline 93
wdr
.dbline 93
L3:
.dbline 93
L5:
.dbline 93
; for( DelayCounter = 0; DelayCounter < time; ) { WDR(); }
lds R2,_DelayCounter
lds R3,_DelayCounter+1
cp R2,R16
cpc R3,R17
brlo L2
.dbline -2
.dbline 94
; }
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e send _send fV
; num -> R20
; index -> R22
.even
_send::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 97
;
; void send( uchar index, uchar num )
; {
.dbline 98
; PORTB = ~BIT( index );
ldi R16,1
mov R17,R22
xcall lsl8
mov R2,R16
com R2
out 0x18,R2
.dbline 99
; if( index < 7 ) { PORTA = num_table[num]; }
cpi R22,7
brsh L7
.dbline 99
.dbline 99
ldi R24,<_num_table
ldi R25,>_num_table
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
out 0x1b,R30
.dbline 99
xjmp L8
L7:
.dbline 100
; else { PORTA = num; }
.dbline 100
out 0x1b,R20
.dbline 100
L8:
.dbline 101
; delay( 1 );
ldi R16,1
ldi R17,0
xcall _delay
.dbline -2
.dbline 102
; }
L6:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r num 20 c
.dbsym r index 22 c
.dbend
.dbfunc e send_char _send_char fV
; ch -> R20
; index -> R22
.even
_send_char::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 105
;
; void send_char( uchar index, uchar ch )
; {
.dbline 106
; PORTB = ~BIT( index );
ldi R16,1
mov R17,R22
xcall lsl8
mov R2,R16
com R2
out 0x18,R2
.dbline 107
; PORTA = ch;
out 0x1b,R20
.dbline 108
; delay(1);
ldi R16,1
ldi R17,0
xcall _delay
.dbline -2
.dbline 109
; }
L9:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r ch 20 c
.dbsym r index 22 c
.dbend
.dbfunc e scan_key _scan_key fc
; index -> R16
.even
_scan_key::
.dbline -1
.dbline 113
;
; //键盘扫描
; uchar scan_key( void )
; {
.dbline 115
; uchar index;
; if(!(PINC & 0x80))
sbic 0x13,7
rjmp L11
.dbline 116
; index = 0;
clr R16
xjmp L12
L11:
.dbline 117
; else if(!(PINC & 0x40))
sbic 0x13,6
rjmp L13
.dbline 118
; index = 1;
ldi R16,1
xjmp L14
L13:
.dbline 119
; else if(!(PINC & 0x20))
sbic 0x13,5
rjmp L15
.dbline 120
; index = 2;
ldi R16,2
xjmp L16
L15:
.dbline 121
; else if(!(PINC & 0x10))
sbic 0x13,4
rjmp L17
.dbline 122
; index = 3;
ldi R16,3
L17:
L16:
L14:
L12:
.dbline 123
; PORTC = 0x0F; //切换
ldi R24,15
out 0x15,R24
.dbline 124
; DDRC = 0xF0;
ldi R24,240
out 0x14,R24
.dbline 125
; if( !(PINC & 0x08) )
sbic 0x13,3
rjmp L19
.dbline 126
; index += 0;
xjmp L20
L19:
.dbline 127
; else if( !(PINC & 0x04) )
sbic 0x13,2
rjmp L21
.dbline 128
; index += 4;
subi R16,252 ; addi 4
xjmp L22
L21:
.dbline 129
; else if( !(PINC & 0x02) )
sbic 0x13,1
rjmp L23
.dbline 130
; index += 8;
subi R16,248 ; addi 8
xjmp L24
L23:
.dbline 131
; else if( !(PINC & 0x01) )
sbic 0x13,0
rjmp L25
.dbline 132
; index += 12;
subi R16,244 ; addi 12
L25:
L24:
L22:
L20:
.dbline 133
; PORTC = 0xF0; //切换
ldi R24,240
out 0x15,R24
.dbline 134
; DDRC = 0x0F;
ldi R24,15
out 0x14,R24
.dbline 135
; return index;
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r index 16 c
.dbend
.dbfunc e transmit _transmit fV
; tmp -> <dead>
; i -> R20
.even
_transmit::
xcall push_gset1
.dbline -1
.dbline 139
; }
; //串口传送数据
; void transmit(void)
; {
.dbline 142
; uchar i;
; uchar tmp;
; for(i=0;i<10;i++)
clr R20
xjmp L31
L28:
.dbline 143
.dbline 144
ldi R18,7
ldi R16,7
xcall _send
.dbline 145
ldi R16,2
ldi R17,0
xcall _delay
.dbline 146
L29:
.dbline 142
inc R20
L31:
.dbline 142
cpi R20,10
brlo L28
.dbline 147
; {
; send(7,7);
; delay(2);
; }
; for(i=0;i<20;i++)
clr R20
xjmp L35
X0:
.dbline 148
; {
L36:
.dbline 149
L37:
.dbline 149
sbis 0xb,5
rjmp L36
.dbline 150
ldi R24,<_trans_buf
ldi R25,>_trans_buf
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0xc,R2
.dbline 151
ldi R16,1
ldi R17,0
xcall _delay
.dbline 152
L33:
.dbline 147
inc R20
L35:
.dbline 147
cpi R20,20
brlo L37
.dbline -2
.dbline 153
; while(!(UCSRA&BIT(UDRE)));
; UDR=trans_buf[i];
; delay(1);
; }
; }
L27:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l tmp 1 c
.dbsym r i 20 c
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 155
; void port_init(void)
; {
.dbline 156
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 157
; DDRA = 0xFF;
ldi R24,255
out 0x1a,R24
.dbline 158
; PORTB = 0xFF;
out 0x18,R24
.dbline 159
; DDRB = 0xFF;
out 0x17,R24
.dbline 160
; PORTC = 0xf0; //m103 output only
ldi R24,240
out 0x15,R24
.dbline 161
; DDRC = 0x0f;
ldi R24,15
out 0x14,R24
.dbline 162
; PORTD = 0xFF;
ldi R24,255
out 0x12,R24
.dbline 163
; DDRD = 0xF0;
ldi R24,240
out 0x11,R24
.dbline -2
.dbline 164
; }
L39:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 171
;
; //TIMER0 initialisation - prescale:64
; // WGM: Normal
; // desired value: 1mSec
; // actual value: 1.000mSec (0.0%)
; void timer0_init(void)
; {
.dbline 172
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 173
; TCNT0 = 0x83; //set count
ldi R24,131
out 0x32,R24
.dbline 174
; OCR0 = 0x7D; //set compare
ldi R24,125
out 0x3c,R24
.dbline 175
; TCCR0 = 0x03; //start timer
ldi R24,3
out 0x33,R24
.dbline -2
.dbline 176
; }
L40:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 36
jmp _timer0_ovf_isr
.area text(rom, con, rel)
.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
_timer0_ovf_isr::
st -y,R24
st -y,R25
in R24,0x3f
st -y,R24
.dbline -1
.dbline 180
;
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
.dbline 181
; TCNT0 = 0x83; //reload counter value
ldi R24,131
out 0x32,R24
.dbline 182
; DelayCounter ++;
.dbline 183
; SysCounter ++;
lds R24,_DelayCounter
lds R25,_DelayCounter+1
adiw R24,1
sts _DelayCounter+1,R25
sts _DelayCounter,R24
lds R24,_SysCounter
lds R25,_SysCounter+1
adiw R24,1
sts _SysCounter+1,R25
sts _SysCounter,R24
.dbline -2
.dbline 184
; }
L41:
ld R24,y+
out 0x3f,R24
ld R25,y+
ld R24,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e uart0_init _uart0_init fV
.even
_uart0_init::
.dbline -1
.dbline 194
; //
;
;
; //UART0 initialisation
; // desired baud rate: 9600
; // actual: baud rate:9615 (0.2%)
; // char size: 8 bit
; // parity: Disabled
; void uart0_init(void)
; {
.dbline 195
; UCSRB = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 196
; UCSRA = 0x00;
out 0xb,R2
.dbline 197
; UCSRC = 0x86;
ldi R24,134
out 0x20,R24
.dbline 198
; UBRRL = 51; //set baud rate lo
ldi R24,51
out 0x9,R24
.dbline 199
; UBRRH = 0x00; //set baud rate hi
out 0x20,R2
.dbline 200
; UCSRB = 0x18;
ldi R24,24
out 0xa,R24
.dbline -2
.dbline 201
; }
L42:
.dbline 0 ; func end
ret
.dbend
.dbfunc e watchdog_init _watchdog_init fV
.even
_watchdog_init::
.dbline -1
.dbline 206
;
; //Watchdog initialisation
; // prescale: 32K cycles
; void watchdog_init(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -