📄 课程设计.s
字号:
.dbline 585
; case 0x12 : // 左 SHIFT
; Shift = 0;
clr R2
sts _Shift,R2
.dbline 586
; break;
xjmp L151
L154:
.dbline 589
;
; case 0x59 : // 右 SHIFT
; Shift = 0;
clr R2
sts _Shift,R2
.dbline 590
; break;
L150:
L151:
.dbline 592
; }
; }
L112:
.dbline 593
; flag = 0; //标识字符处理完了
clr R2
sts _flag,R2
.dbline -2
L110:
adiw R28,1
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r TempCyc 22 c
.dbsym r ScanCode 20 c
.dbend
.dbfunc e initial_Exinterup _initial_Exinterup fV
.even
_initial_Exinterup::
.dbline -1
.dbline 600
; }
; //**************************************************//
; /*初始化****/
; //**************************************************//
;
; void initial_Exinterup(void)
; {
.dbline 601
; DDRE&=~BIT(4);
cbi 0x2,4
.dbline 602
; DDRE&=~BIT(5);//输入
cbi 0x2,5
.dbline 603
; PORTE|=BIT(4);
sbi 0x3,4
.dbline 604
; PORTE|=BIT(5);//都置高
sbi 0x3,5
.dbline 605
; MCUCR=0X00;
clr R2
out 0x35,R2
.dbline 606
; EICRB=0X00;
out 0x3a,R2
.dbline 607
; EIMSK=0X10; //INT4标志
ldi R24,16
out 0x39,R24
.dbline -2
L156:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart0_init _uart0_init fV
.even
_uart0_init::
.dbline -1
.dbline 613
; }
;
; /*********************计算机通讯 ***********************/
;
; void uart0_init(void)
; {
.dbline 614
; UCSR0B = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 615
; UCSR0A = 0x00;
out 0xb,R2
.dbline 616
; UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
ldi R24,6
sts 149,R24
.dbline 617
; UBRR0L=(fosc/16/(BAUD+1))%256;
ldi R24,52
out 0x9,R24
.dbline 618
; UBRR0H=(fosc/16/(BAUD+1))/256;
sts 144,R2
.dbline 619
; UCSR0B =(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);//RXCEN TXCEN
ldi R24,152
out 0xa,R24
.dbline -2
L157:
.dbline 0 ; func end
ret
.dbend
.dbfunc e putchar0 _putchar0 fV
; c -> R16
.even
_putchar0::
.dbline -1
.dbline 623
; }
;
; void putchar0(unsigned char c)
; {
.dbline 624
; UDR0=c;
out 0xc,R16
L159:
.dbline 625
L160:
.dbline 625
; while (!(UCSR0A&(1<<UDRE0)));
sbis 0xb,5
rjmp L159
.dbline -2
L158:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e puts0 _puts0 fV
; s -> R20,R21
.even
_puts0::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 628
; }
; void puts0(char *s)
; {
xjmp L164
L163:
.dbline 630
.dbline 631
movw R30,R20
ldd R16,z+0
xcall _putchar0
.dbline 632
subi R20,255 ; offset = 1
sbci R21,255
.dbline 633
L164:
.dbline 629
; while (*s)
movw R30,R20
ldd R2,z+0
tst R2
brne L163
.dbline 634
; {
; putchar0(*s);
; s++;
; }
; putchar0(0x0a);
ldi R16,10
xcall _putchar0
.dbline 635
; putchar0(0x0d);
ldi R16,13
xcall _putchar0
.dbline -2
L162:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r s 20 pc
.dbend
.dbfunc e getchar0 _getchar0 fc
.even
_getchar0::
.dbline -1
.dbline 638
; }
; unsigned char getchar0(void)
; {
L167:
.dbline 639
L168:
.dbline 639
; while(!(UCSR0A& (1<<RXC0)));
sbis 0xb,7
rjmp L167
.dbline 640
; return UDR0;
in R16,0xc
.dbline -2
L166:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 643
; }
; void delay_us(int time)
; {
L171:
.dbline 645
; do
; {
.dbline 646
; time--;
subi R16,1
sbci R17,0
.dbline 647
; }
L172:
.dbline 648
; while (time>1);
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L171
.dbline -2
L170:
.dbline 0 ; func end
ret
.dbsym r time 16 I
.dbend
.dbfunc e delay_ms _delay_ms fV
; time -> R20,R21
.even
_delay_ms::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 651
; }
; void delay_ms(unsigned int time)
; {
xjmp L176
L175:
.dbline 653
.dbline 654
ldi R16,1000
ldi R17,3
xcall _delay_us
.dbline 655
subi R20,1
sbci R21,0
.dbline 656
L176:
.dbline 652
; while(time!=0)
cpi R20,0
cpc R20,R21
brne L175
X11:
.dbline -2
L174:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
.dbfunc e computer _computer fV
.even
_computer::
xcall push_gset2
sbiw R28,4
.dbline -1
.dbline 660
; {
; delay_us(1000);
; time--;
; }
; }
; /*********************计算器***********************/
; void computer(void)
; {
.dbline 661
; if((scan_key()<=9)&&(scan_key()>=0))
xcall _scan_key
ldi R24,9
cp R24,R16
brlo L179
xcall _scan_key
cpi R16,0
brlo L179
.dbline 662
; {
.dbline 663
; write_ASCII(0xf9,jy,16,table1[scan_key()]);
xcall _scan_key
ldi R24,<_table1
ldi R25,>_table1
mov R30,R16
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,16
ldi R25,0
std y+1,R25
std y+0,R24
lds R18,_jy
clr R19
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 664
; jy++;
lds R24,_jy
subi R24,255 ; addi 1
sts _jy,R24
.dbline 666
; //count_comp++;
; putchar0(jy);
mov R16,R24
xcall _putchar0
.dbline 679
; /* switch(jy)
; {
; case 1:value=scan_key();break;
; case 2:value=scan_key()*10+scan_key();break;
; case 3:value=scan_key()*10+scan_key();break;
; case 4:value=scan_key()*10+scan_key();break;
; case 5:value=scan_key()*10+scan_key();break;
; case 6:value=scan_key()*10+scan_key();break;
; case 7:value=scan_key()*10+scan_key();break;
; case 8:value=scan_key()*10+scan_key();break;
; default:break;
; }*/
; }
L179:
.dbline 681
;
; if(scan_key()==10)//A
xcall _scan_key
cpi R16,10
brne L181
.dbline 682
; {valuefirst=value;value=0;flag_add=1;count_comp=0;jy=0;ocmj_write(0xf4);} //'+',
.dbline 682
lds R4,_value+2
lds R5,_value+2+1
lds R2,_value
lds R3,_value+1
sts _valuefirst+1,R3
sts _valuefirst,R2
sts _valuefirst+2+1,R5
sts _valuefirst+2,R4
.dbline 682
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _value+1,R21
sts _value,R20
sts _value+2+1,R23
sts _value+2,R22
.dbline 682
ldi R24,1
sts _flag_add,R24
.dbline 682
clr R2
sts _count_comp,R2
.dbline 682
sts _jy,R2
.dbline 682
ldi R16,244
xcall _ocmj_write
.dbline 682
L181:
.dbline 683
; if((ks()==0xff)&&(scan_key()==11))//B
xcall _ks
cpi R16,255
brne L183
xcall _scan_key
cpi R16,11
brne L183
.dbline 684
; {valuefirst=value;value=0;flag_sub=1;count_comp=0;jy=0;ocmj_write(0xf4);} // -
.dbline 684
lds R4,_value+2
lds R5,_value+2+1
lds R2,_value
lds R3,_value+1
sts _valuefirst+1,R3
sts _valuefirst,R2
sts _valuefirst+2+1,R5
sts _valuefirst+2,R4
.dbline 684
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _value+1,R21
sts _value,R20
sts _value+2+1,R23
sts _value+2,R22
.dbline 684
ldi R24,1
sts _flag_sub,R24
.dbline 684
clr R2
sts _count_comp,R2
.dbline 684
sts _jy,R2
.dbline 684
ldi R16,244
xcall _ocmj_write
.dbline 684
L183:
.dbline 685
; if((ks()==0xff)&&(scan_key()==12))//c
xcall _ks
cpi R16,255
brne L185
xcall _scan_key
cpi R16,12
brne L185
.dbline 686
; {valuefirst=value;value=0;flag_mul=1;count_comp=0;jy=0;ocmj_write(0xf4);}// *
.dbline 686
lds R4,_value+2
lds R5,_value+2+1
lds R2,_value
lds R3,_value+1
sts _valuefirst+1,R3
sts _valuefirst,R2
sts _valuefirst+2+1,R5
sts _valuefirst+2,R4
.dbline 686
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _value+1,R21
sts _value,R20
sts _value+2+1,R23
sts _value+2,R22
.dbline 686
ldi R24,1
sts _flag_mul,R24
.dbline 686
clr R2
sts _count_comp,R2
.dbline 686
sts _jy,R2
.dbline 686
ldi R16,244
xcall _ocmj_write
.dbline 686
L185:
.dbline 687
; if((ks()==0xff)&&(scan_key()==13))//D
xcall _ks
cpi R16,255
brne L187
xcall _scan_key
cpi R16,13
brne L187
.dbline 688
; {valuefirst=value;value=0;flag_mod=1;count_comp=0;jy=0;ocmj_write(0xf4);}// /
.dbline 688
lds R4,_value+2
lds R5,_value+2+1
lds R2,_value
lds R3,_value+1
sts _valuefirst+1,R3
sts _valuefirst,R2
sts _valuefirst+2+1,R5
sts _valuefirst+2,R4
.dbline 688
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _value+1,R21
sts _value,R20
sts _value+2+1,R23
sts _value+2,R22
.dbline 688
ldi R24,1
sts _flag_mod,R24
.dbline 688
clr R2
sts _count_comp,R2
.dbline 688
sts _jy,R2
.dbline 688
ldi R16,244
xcall _ocmj_write
.dbline 688
L187:
.dbline 689
; if(scan_key()==14)//E
xcall _scan_key
cpi R16,14
breq X12
xjmp L189
X12:
.dbline 690
; {
.dbline 691
; if(flag_add==1) {rezult=valuefirst+value;count_comp=0;flag_add=0;ocmj_write(0xf4);jy=0;
lds R24,_flag_add
cpi R24,1
breq X13
xjmp L191
X13:
.dbline 691
.dbline 691
lds R4,_value+2
lds R5,_value+2+1
lds R2,_value
lds R3,_value+1
lds R8,_valuefirst+2
lds R9,_valuefirst+2+1
lds R6,_valuefirst
lds R7,_valuefirst+1
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
sts _rezult+1,R7
sts _rezult,R6
sts _rezult+2+1,R9
sts _rezult+2,R8
.dbline 691
clr R2
sts _count_comp,R2
.dbline 691
sts _flag_add,R2
.dbline 691
ldi R16,244
xcall _ocmj_write
.dbline 691
clr R2
sts _jy,R2
.dbline 692
; write_ASCII(0xf9,6,32,table1[rezult/100]);
ldi R20,100
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,6
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 693
; write_ASCII(0xf9,7,32,table1[rezult%100/10]);
ldi R20,100
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
ldi R20,10
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,7
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 694
; write_ASCII(0xf9,8,32,table1[rezult%10]);
ldi R20,10
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_rezult+2
lds R5,_rezult+2+1
lds R2,_rezult
lds R3,_rezult+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall mod32u
movw R30,R16
ldi R24,<_table1
ldi R25,>_table1
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
std y+3,R3
std y+2,R2
ldi R24,32
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,8
ldi R19,0
ldi R16,249
ldi R17,0
xcall _write_ASCII
.dbline 695
; }
L191:
.dbline 696
; if(flag_sub==1) {rezult=valuefirst-value;count_comp=0;flag_sub=0;ocmj_write(0xf4);jy=0; write_ASCII(0xf9,6,32,table1[rezult/100]);
lds R24,_flag_sub
cpi R24,1
breq X14
xjmp L193
X14:
.dbline 696
.dbline 696
lds R4,_value+2
lds R5,_value+2+1
lds R2,_value
lds R3,_value+1
lds R8,_valuefirst+2
lds R9,_valuefirst+2+1
lds R6,_valuefirst
lds R7,_valuefirst+1
sub R6,R2
sbc R7,R3
sbc R8,R4
sbc R9,R5
sts _rezult+1,R7
sts _rezult,R6
sts _rezult+2+1,R9
sts _rezult+2,R8
.dbline 696
clr R2
sts _count_comp,R2
.dbline 696
sts _flag_sub,R2
.dbline 696
ldi R16,244
xcall _ocmj_write
.dbline 696
clr R2
sts _
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -