📄 cnc2119.txt
字号:
000b10 e5c10004 STRB r0,[r1,#4]
000b14 e5c1500c STRB r5,[r1,#0xc]
000b18 e3a00000 MOV r0,#0
000b1c e5000ff4 STR r0,[r0,#-0xff4]
000b20 e3a00026 MOV r0,#0x26
000b24 e3a01000 MOV r1,#0
000b28 e5010dfc STR r0,[r1,#-0xdfc]
000b2c e24f0e6f ADR r0,|L1.1092|
000b30 e5010efc STR r0,[r1,#-0xefc]
000b34 e3a00000 MOV r0,#0
000b38 e5100ff0 LDR r0,[r0,#-0xff0]
000b3c e3800040 ORR r0,r0,#0x40
000b40 e5010ff0 STR r0,[r1,#-0xff0]
000b44 e3a00001 MOV r0,#1
000b48 eaffffba B |L1.2616|
;;;413 uint32 bak;
;;;414 PINSEL0|=0X00000005;
;;;415
;;;416 //参数过滤
;;;417 if((0==baud)||(baud<115200))
;;;418 return(0);
;;;419 if((set.datab<5)||(set.datab>8))
;;;420 return(0);
;;;421 if((0==set.stopb)||(set.stopb>2))
;;;422 return(0);
;;;423 if(set.parity>4)
;;;424 return(0);
;;;425 //设置串口波特率
;;;426 U0LCR=0x80; //DLAB位置1
;;;427 bak=(Fpclk>>4)/baud;
;;;428 U0DLM=bak>>8;
;;;429 U0DLL=bak&0xff;
;;;430 //设置串口模式
;;;431 bak=set.datab-5; //设置字长度
;;;432 if(2==set.stopb)
;;;433 bak|=0x04; //判断是否为2位停止位
;;;434 if(0!=set.parity)
;;;435 {
;;;436 set.parity=set.parity-1;
;;;437 bak|=0x08;
;;;438 }
;;;439 bak|=set.parity<<4; //设置奇偶校验
;;;440 U0FCR=0x81;
;;;441 U0IER=0X01;
;;;442 U0LCR=bak;
;;;443 VICIntSelect=0x00000000;
;;;444 VICVectCntl1=0x26;
;;;445 VICVectAddr1=(int)IRQ_UART0;
;;;446 VICIntEnable|=0x00000040;
;;;447 return(1);
;;;448
;;;449
;;;450 }
ENDP
IRQ_Eint0 PROC
;;;656 void IRQ_Eint0(void) __irq
;;;657 { //下面尜加键值处理
000b4c e92d503f PUSH {r0-r5,r12,lr}
000b50 e59f0210 LDR r0,|L1.3432|
000b54 e5d00000 LDRB r0,[r0,#0] ; nled
000b58 ebfffffe BL CH452I2CWrByte
000b5c ebfffffe BL CH452I2CRead
000b60 e1a04000 MOV r4,r0
000b64 e1a00004 MOV r0,r4
000b68 ebfffffe BL KeyDone
000b6c e1a05000 MOV r5,r0
000b70 e1a00005 MOV r0,r5
000b74 ebfffffe BL SendData
000b78 e1a00005 MOV r0,r5
000b7c ebfffffe BL ISendBuf
000b80 ea000002 B |L1.2960|
|L1.2948|
000b84 e3a00001 MOV r0,#1
000b88 e59f11c4 LDR r1,|L1.3412|
000b8c e5c10140 STRB r0,[r1,#0x140]
|L1.2960|
000b90 e59f01bc LDR r0,|L1.3412|
000b94 e5d00140 LDRB r0,[r0,#0x140]
000b98 e3100001 TST r0,#1
000b9c 1afffff8 BNE |L1.2948|
000ba0 e3a00000 MOV r0,#0
000ba4 e5000fd0 STR r0,[r0,#-0xfd0]
000ba8 e8bd503f POP {r0-r5,r12,lr}
000bac e25ef004 SUBS pc,lr,#4
;;;658 uint8 data;
;;;659 uint32 dat;
;;;660 CH452I2CWrByte(nled); //相应按键的LED灯亮
;;;661 data=CH452I2CRead();
;;;662 dat=KeyDone(data);
;;;663 SendData(dat);
;;;664 ISendBuf(dat);
;;;665 while((EXTINT&0x01)!=0) //等待外部中断信号恢复为高电平
;;;666 EXTINT=0x01; //清除EINTO中断标志
;;;667 VICVectAddr=0; //向量中断结束
;;;668 }
ENDP
sendmake PROC
;;;675 void sendmake(uint16 make_code) //通码,按键按下,或持续按住
;;;676 {
000bb0 e92d4010 PUSH {r4,lr}
000bb4 e1a04000 MOV r4,r0
000bb8 e1a00004 MOV r0,r4
000bbc ebfffffe BL SendData
000bc0 e1a00004 MOV r0,r4
000bc4 ebfffffe BL ISendBuf
000bc8 e8bd4010 POP {r4,lr}
000bcc e12fff1e BX lr
;;;677
;;;678 SendData(make_code); //直接发低8位
;;;679 ISendBuf(make_code);
;;;680
;;;681 }
ENDP
sendbreak PROC
;;;688 void sendbreak(uint16 make_code) //断码,按键释放
;;;689 {
000bd0 e92d4070 PUSH {r4-r6,lr}
000bd4 e1a04000 MOV r4,r0
000bd8 e3a05000 MOV r5,#0
000bdc e3a06000 MOV r6,#0
000be0 ea000015 B |L1.3132|
|L1.3044|
000be4 e3a05000 MOV r5,#0
000be8 e2860001 ADD r0,r6,#1
000bec e20060ff AND r6,r0,#0xff
000bf0 e3a000f0 MOV r0,#0xf0
000bf4 ebfffffe BL SendData
000bf8 e0800005 ADD r0,r0,r5
000bfc e20050ff AND r5,r0,#0xff
000c00 e1a00004 MOV r0,r4
000c04 ebfffffe BL SendData
000c08 e0800005 ADD r0,r0,r5
000c0c e20050ff AND r5,r0,#0xff
000c10 e3a000f0 MOV r0,#0xf0
000c14 ebfffffe BL ISendBuf
000c18 e0800005 ADD r0,r0,r5
000c1c e20050ff AND r5,r0,#0xff
000c20 e1a00004 MOV r0,r4
000c24 ebfffffe BL ISendBuf
000c28 e0800005 ADD r0,r0,r5
000c2c e20050ff AND r5,r0,#0xff
000c30 e3560005 CMP r6,#5
000c34 1a000000 BNE |L1.3132|
000c38 ea000001 B |L1.3140|
|L1.3132|
000c3c e3550008 CMP r5,#8
000c40 1affffe7 BNE |L1.3044|
|L1.3140|
000c44 e1a00000 MOV r0,r0
000c48 e8bd4070 POP {r4-r6,lr}
000c4c e12fff1e BX lr
;;;690 uint8 sendsucc=0; //存储返回值
;;;691 uint8 t=0; //记次数
;;;692 while(sendsucc!=0x08) //判断是否发送成功,没有则继续发送断码
;;;693 {
;;;694 sendsucc = 0;
;;;695 t++;
;;;696 sendsucc+=SendData(0xf0); //发送断码0xf0
;;;697 sendsucc+=SendData(make_code); //直接发送
;;;698 sendsucc+=ISendBuf(0xf0);
;;;699 sendsucc+=ISendBuf(make_code);
;;;700 if(t==5) //防止一直没有成功发送断码,产生死循环
;;;701 break;
;;;702 }
;;;703 }
ENDP
Reset PROC
;;;713
;;;714 }
000c50 e12fff1e BX lr
ENDP
main PROC
;;;722 int main(void)
;;;723 {
000c54 e92d4008 PUSH {r3,lr}
000c58 e3a00008 MOV r0,#8
000c5c e59f1118 LDR r1,|L1.3452|
000c60 e5c10000 STRB r0,[r1,#0] ; uart0_set
000c64 e3a00001 MOV r0,#1
000c68 e5c10001 STRB r0,[r1,#1] ; uart0_set
000c6c e3a00000 MOV r0,#0
000c70 e5c10002 STRB r0,[r1,#2] ; uart0_set
000c74 ebfffffe BL Reset
000c78 e59f10f0 LDR r1,|L1.3440|
000c7c e5810000 STR r0,[r1,#0]
000c80 e5810004 STR r0,[r1,#4]
000c84 e59f10d4 LDR r1,|L1.3424|
000c88 e5c10000 STRB r0,[r1,#0] ; rcv_new
000c8c e3a02003 MOV r2,#3
000c90 e59f10e4 LDR r1,|L1.3452|
000c94 e1a0000d MOV r0,sp
000c98 ebfffffe BL __aeabi_memcpy
000c9c e59d1000 LDR r1,[sp,#0]
000ca0 e59f00cc LDR r0,|L1.3444|
000ca4 ebfffffe BL UART0_Ini
000ca8 ebfffffe BL CH452Init
000cac ebfffffe BL InitCAN
000cb0 ea000020 B |L1.3384|
|L1.3252|
000cb4 e1a00000 MOV r0,r0
000cb8 e59f10c0 LDR r1,|L1.3456|
000cbc e1d100b0 LDRH r0,[r1,#0] ; IndeKey
000cc0 ebfffffe BL sendbreak
000cc4 e1a00000 MOV r0,r0
000cc8 e59f10b0 LDR r1,|L1.3456|
000ccc e1d100b2 LDRH r0,[r1,#2] ; IndeKey
000cd0 ebfffffe BL sendbreak
000cd4 e1a00000 MOV r0,r0
000cd8 e59f10a0 LDR r1,|L1.3456|
000cdc e1d100b4 LDRH r0,[r1,#4] ; IndeKey
000ce0 ebfffffe BL sendbreak
000ce4 e1a00000 MOV r0,r0
000ce8 e59f1090 LDR r1,|L1.3456|
000cec e1d100b6 LDRH r0,[r1,#6] ; IndeKey
000cf0 ebfffffe BL sendbreak
000cf4 e1a00000 MOV r0,r0
000cf8 e59f1080 LDR r1,|L1.3456|
000cfc e1d100b8 LDRH r0,[r1,#8] ; IndeKey
000d00 ebfffffe BL sendbreak
000d04 e1a00000 MOV r0,r0
000d08 e59f1070 LDR r1,|L1.3456|
000d0c e1d100ba LDRH r0,[r1,#0xa] ; IndeKey
000d10 ebfffffe BL sendbreak
000d14 e1a00000 MOV r0,r0
000d18 e59f1060 LDR r1,|L1.3456|
000d1c e1d100bc LDRH r0,[r1,#0xc] ; IndeKey
000d20 ebfffffe BL sendbreak
000d24 e1a00000 MOV r0,r0
000d28 e59f1050 LDR r1,|L1.3456|
000d2c e1d100be LDRH r0,[r1,#0xe] ; IndeKey
000d30 ebfffffe BL sendbreak
000d34 e1a00000 MOV r0,r0
|L1.3384|
000d38 e1a00000 MOV r0,r0
000d3c eaffffdc B |L1.3252|
|L1.3392|
000d40 e0028000 DCD 0xe0028000
|L1.3396|
000d44 00000401 DCD 0x00000401
|L1.3400|
000d48 00000403 DCD 0x00000403
|L1.3404|
000d4c e0044000 DCD 0xe0044000
|L1.3408|
000d50 00000000 DCD val
|L1.3412|
000d54 e01fc000 DCD 0xe01fc000
|L1.3416|
000d58 e003c000 DCD 0xe003c000
|L1.3420|
000d5c e000c000 DCD 0xe000c000
|L1.3424|
000d60 00000000 DCD rcv_new
|L1.3428|
000d64 00000000 DCD rcv_buf
|L1.3432|
000d68 00000000 DCD nled
|L1.3436|
000d6c 00000000 DCD keylist
|L1.3440|
000d70 e002c000 DCD 0xe002c000
|L1.3444|
000d74 0001c200 DCD 0x0001c200
|L1.3448|
000d78 000a8c00 DCD 0x000a8c00
|L1.3452|
000d7c 00000000 DCD uart0_set
|L1.3456|
000d80 00000000 DCD IndeKey
;;;724 uint8 i,j;
;;;725 uint16 p;
;;;726 uart0_set.datab=8;
;;;727 uart0_set.stopb=1;
;;;728 uart0_set.parity=0;
;;;729 Reset();
;;;730 PINSEL0=0x00000000;
;;;731 PINSEL1=0x00000000;
;;;732 //IO0DIR=PINCON;
;;;733 //IO0SET=PINCON;
;;;734 rcv_new=0;
;;;735 UART0_Ini(115200,uart0_set);
;;;736 CH452Init();
;;;737 InitCAN();
;;;738 while(1)
;;;739 {
;;;740 if(S_And==0) //如果+4按下,则发送通码,否则发送断码
;;;741 sendmake(IndeKey[0]);
;;;742 else
;;;743 sendbreak(IndeKey[0]);
;;;744 if(S_Sub==0) //如果-4按下,则发送通码,否则发送断码
;;;745 sendmake(IndeKey[1]);
;;;746 else
;;;747 sendbreak(IndeKey[1]);
;;;748 if(X_And==0) //如果+X按下,则发送通码,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -