📄 ch452ldriver.s
字号:
rjmp L12
L18:
.dbline 183
; case(5):
; Ch452l_Writecommand(0x05d0);//5位显示,BCD译码
ldi R16,1488
ldi R17,5
rcall _Ch452l_Writecommand
.dbline 184
; Delay_Nus(3);
ldi R16,3
ldi R17,0
rcall _Delay_Nus
.dbline 185
; break;
rjmp L12
L19:
.dbline 187
; case(6):
; Ch452l_Writecommand(0x05e0);//6位显示,BCD译码
ldi R16,1504
ldi R17,5
rcall _Ch452l_Writecommand
.dbline 188
; Delay_Nus(3);
ldi R16,3
ldi R17,0
rcall _Delay_Nus
.dbline 189
; break;
rjmp L12
L20:
.dbline 191
; case(7):
; Ch452l_Writecommand(0x05f0);//7位显示,BCD译码
ldi R16,1520
ldi R17,5
rcall _Ch452l_Writecommand
.dbline 192
; Delay_Nus(3);
ldi R16,3
ldi R17,0
rcall _Delay_Nus
.dbline 193
; break;
rjmp L12
L21:
.dbline 195
; case(8):
; Ch452l_Writecommand(0x0580);//8位显示,BCD译码
ldi R16,1408
ldi R17,5
rcall _Ch452l_Writecommand
.dbline 196
; Delay_Nus(3);
ldi R16,3
ldi R17,0
rcall _Delay_Nus
.dbline 197
; break;
.dbline 199
; default:
; break;
L12:
.dbline 201
; }
; Ch452l_Writecommand(CH452L_DIG7 | p[7]);
movw R30,R20
ldd R16,z+7
clr R17
ori R17,15
rcall _Ch452l_Writecommand
.dbline 202
; Ch452l_Writecommand(CH452L_DIG6 | p[6]);
movw R30,R20
ldd R16,z+6
clr R17
ori R17,14
rcall _Ch452l_Writecommand
.dbline 203
; Ch452l_Writecommand(CH452L_DIG5 | p[5]);
movw R30,R20
ldd R16,z+5
clr R17
ori R17,13
rcall _Ch452l_Writecommand
.dbline 204
; Ch452l_Writecommand(CH452L_DIG4 | p[4]);
movw R30,R20
ldd R16,z+4
clr R17
ori R17,12
rcall _Ch452l_Writecommand
.dbline 205
; Ch452l_Writecommand(CH452L_DIG3 | p[3]);
movw R30,R20
ldd R16,z+3
clr R17
ori R17,11
rcall _Ch452l_Writecommand
.dbline 206
; Ch452l_Writecommand(CH452L_DIG2 | p[2]);
movw R30,R20
ldd R16,z+2
clr R17
ori R17,10
rcall _Ch452l_Writecommand
.dbline 207
; Ch452l_Writecommand(CH452L_DIG1 | p[1]);
movw R30,R20
ldd R16,z+1
clr R17
ori R17,9
rcall _Ch452l_Writecommand
.dbline 208
; Ch452l_Writecommand(CH452L_DIG0 | p[0]);
movw R30,R20
ldd R16,z+0
clr R17
ori R17,8
rcall _Ch452l_Writecommand
.dbline 209
; Ch452l_Writecommand(CH452L_DIG0 | p[0]);
movw R30,R20
ldd R16,z+0
clr R17
ori R17,8
rcall _Ch452l_Writecommand
.dbline -2
L10:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l i 1 c
.dbsym r p 20 pc
.dbsym r n 22 c
.dbend
.dbfunc e Read_Keycode _Read_Keycode fc
; temp -> <dead>
; keyvalue -> R22
; cmd -> R10
; i -> R20
.even
_Read_Keycode::
rcall push_gset3
.dbline -1
.dbline 221
; }
;
; /***************************************************************************
; *函数名:
; *功能:读取CH452L按键代码
; *入口参数:无
; *出口参数:返回读取到的键值,参考手册上的键值表
; *说明:由于读取按键代码时B0~B7无效,只有B8~B11有效,可以使用简化的读取按键命
; 令,即输出命令0111。必须关中断,再开中断,否则读出的键值出错
; ****************************************************************************/
; unsigned char Read_Keycode(void)
; {
.dbline 222
; unsigned char keyvalue=0,temp,i;
clr R22
.dbline 223
; unsigned char cmd=0x07;//使用简化的读取按键命令,使用cmd的低四位
ldi R24,7
mov R10,R24
.dbline 224
; GICR &= 0xbf; //关中断INT0
in R24,0x3b
andi R24,191
out 0x3b,R24
.dbline 225
; Delay_Nus(5);
ldi R16,5
ldi R17,0
rcall _Delay_Nus
.dbline 226
; LOAD_OUT0; //LOAD输出0
cbi 0x15,0
.dbline 227
; for(i=0;i<4;i++)
clr R20
rjmp L26
L23:
.dbline 228
; {
.dbline 229
; DCLK_OUT0;
cbi 0x15,1
.dbline 230
; if(cmd & 1)
sbrs R10,0
rjmp L27
.dbline 231
; {
.dbline 232
; DIN_OUT1;
sbi 0x15,2
.dbline 233
; }
rjmp L28
L27:
.dbline 235
; else
; {
.dbline 236
; DIN_OUT0;
cbi 0x15,2
.dbline 237
; }
L28:
.dbline 238
sbi 0x15,1
.dbline 239
lsr R10
.dbline 240
L24:
.dbline 227
inc R20
L26:
.dbline 227
cpi R20,4
brlo L23
.dbline 241
; DCLK_OUT1;
; cmd=cmd>>1;
; }
; LOAD_OUT1; //LOAD上升沿加载一帧数据
sbi 0x15,0
.dbline 242
; DIN_OUT1;
sbi 0x15,2
.dbline 243
; DCLK_OUT1;
sbi 0x15,1
.dbline 244
; keyvalue=0;
clr R22
.dbline 245
; for(i=0;i<7;i++)
clr R20
rjmp L32
L29:
.dbline 246
; {
.dbline 247
; keyvalue<<=1;
lsl R22
.dbline 248
; if(DOUT_PIN)
sbis 0x10,2
rjmp L33
.dbline 249
; {
.dbline 250
; keyvalue=keyvalue+1;
inc R22
.dbline 251
; Uart_Transmit(0x01);
ldi R16,1
ldi R17,0
rcall _Uart_Transmit
.dbline 252
; }
L33:
.dbline 253
cbi 0x15,1
.dbline 254
sbi 0x15,1
.dbline 255
L30:
.dbline 245
inc R20
L32:
.dbline 245
cpi R20,7
brlo L29
.dbline 256
; DCLK_OUT0;
; DCLK_OUT1;
; }
; DCLK_OUT1;
sbi 0x15,1
.dbline 257
; DIN_OUT1;
sbi 0x15,2
.dbline 258
; GICR |= 0x40; //开中断
in R24,0x3b
ori R24,64
out 0x3b,R24
.dbline 259
; GIFR = 0x40; //清中断标志INT0
ldi R24,64
out 0x3a,R24
.dbline 260
; Delay_Nus(5);
ldi R16,5
ldi R17,0
rcall _Delay_Nus
.dbline 261
; return keyvalue;
mov R16,R22
.dbline -2
L22:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l temp 1 c
.dbsym r keyvalue 22 c
.dbsym r cmd 10 c
.dbsym r i 20 c
.dbend
.dbfunc e Init_Int0 _Init_Int0 fV
.even
_Init_Int0::
.dbline -1
.dbline 276
; }
;
; /***************************************************************************
; *函数名:
; *功能:外部中断INT0的初始化,边缘触发
; *入口参数:无
; *出口参数:无
; *中断方式说明: MCUCR INT0中断方式
; * 0x00 低电平中断
; * 0x01 上升沿和下降沿都产生中断
; * 0x02 下降沿产生中断
; * 0x03 上升沿产生中断
; ****************************************************************************/
; void Init_Int0(void)
; {
.dbline 277
; CLI();
cli
.dbline 278
; MCUCR = 0x00; //0x00为低电平触发INT0中断
clr R2
out 0x35,R2
.dbline 279
; GICR |= 0x40; //INT0使能
in R24,0x3b
ori R24,64
out 0x3b,R24
.dbline 280
; TIMSK = 0x00;
out 0x39,R2
.dbline 281
; SEI();
sei
.dbline -2
L35:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 2
rjmp _int0_isr
.area text(rom, con, rel)
.dbfile G:\CH452L\ch452ldriver.c
.dbfunc e int0_isr _int0_isr fV
.even
_int0_isr::
rcall push_lset
.dbline -1
.dbline 293
; }
;
; /***************************************************************************
; *函数名:INT0中断服务函数
; *功能:
; *说明:低电平触发中断
; *入口参数:无
; *出口参数:无
; ****************************************************************************/
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
.dbline 294
; flag=1;
ldi R24,1
ldi R25,0
sts _flag+1,R25
sts _flag,R24
.dbline 295
; Uart_Transmit(0xbb);
ldi R16,187
ldi R17,0
rcall _Uart_Transmit
.dbline 296
; GIFR = 0x40; //清中断标志INT0
ldi R24,64
out 0x3a,R24
.dbline -2
L36:
rcall pop_lset
.dbline 0 ; func end
reti
.dbend
.area bss(ram, con, rel)
.dbfile G:\CH452L\ch452ldriver.c
_flag::
.blkb 2
.dbsym e flag _flag i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -