📄 main.lst
字号:
0098 0310 movia 0eh
0099 0311 iost portb
009A 0312 movar portb_state
009B 0313 bsr portb,0
0314
0315 ;发送数据
009C 0316 movia chan4
009D 0317 movar send_date_low
009E 0318 call send_date
009F 0319 return
0320
0321 channel5:
00A0 0322 movr channel,0
00A1 0323 subia 5
00A2 0324 btrss status,z
00A3 0325 goto channel6
0326
00A4 0327 movia 02h
00A5 0328 iost porta
00A6 0329 movia 0fh
00A7 0330 iost portb
00A8 0331 movar portb_state
00A9 0332 bcr porta,3
0333 ;发送数据
00AA 0334 movia chan5
00AB 0335 movar send_date_low
00AC 0336 call send_date
00AD 0337 return
0338 channel6:
00AE 0339 movr channel,0
00AF 0340 subia 6
00B0 0341 btrss status,z
00B1 0342 goto channel7
0343
00B2 0344 movia 0Ah
00B3 0345 iost porta
00B4 0346 movia 0bh
00B5 0347 iost portb
00B6 0348 movar portb_state
00B7 0349 bcr portb,2
0350 ;发送数据
00B8 0351 movia chan6
00B9 0352 movar send_date_low
00BA 0353 call send_date
00BB 0354 return
0355 channel7:
00BC 0356 movr channel,0
00BD 0357 subia 7
00BE 0358 btrss status,z
00BF 0359 goto channel8
0360
00C0 0361 movia 08h
00C1 0362 iost porta
00C2 0363 movia 0Fh
0364
00C3 0365 iost portb
00C4 0366 movar portb_state
00C5 0367 bcr porta,1
0368 ;发送数据
00C6 0369 movia chan7
00C7 0370 movar send_date_low
00C8 0371 call send_date
00C9 0372 return
0373 channel8:
00CA 0374 movr channel,0
00CB 0375 subia 8
00CC 0376 btrss status,z
00CD 0377 return
0378
00CE 0379 movia 0Ah
00CF 0380 iost porta
00D0 0381 movia 0eh
00D1 0382 iost portb
00D2 0383 movar portb_state
00D3 0384 bcr portb,0
0385 ;发送数据
00D4 0386 movia chan8
00D5 0387 movar send_date_low
00D6 0388 call send_date
00D7 0389 return
0390
0391 ;----------------发送数据子程序---------------------
0392 send_date:
00D8 0393 bsr porta,0
00D9 0394 call Delay10us
0395
00DA 0396 movr send_date_low,0
00DB 0397 movar SendBuf
00DC 0398 call SendByte
00DD 0399 movia send_date_high
00DE 0400 movar SendBuf
00DF 0401 call SendByte
00E0 0402 bcr porta,0
0403 ;bcr portb,6
0404 ;bcr portb,7
00E1 0405 return
0406 ;----------------发送一字节子程序----------------------
0407 SendByte:
00E2 0408 movia 8
00E3 0409 movar Bits ;byte=8bits
0410 Send_8_Bits:
00E4 0411 rrr SendBuf,1 ;发送缓冲器右移一位,低位 => C
00E5 0412 btrsc status,c
00E6 0413 goto Send1 ;C=1,发1
0414 Send0:
00E7 0415 bcr portb,7 ;B7清0
0416 ;bsr portb,7
00E8 0417 bcr portb,6
00E9 0418 call Delay250us ;延时250us
00EA 0419 call Delay250us ;延时250us
00EB 0420 NOP
0421 ;bsr portb,7 ;B7置1
0422 ; bcr portb,7
00EC 0423 bsr portb,6
00ED 0424 call Delay250us ;延时250us
00EE 0425 call Delay250us ;延时250us
00EF 0426 call Delay250us ;延时250us
00F0 0427 call Delay250us ;延时250us
00F1 0428 NOP
00F2 0429 goto OK
0430 Send1:
00F3 0431 bsr portb,7
0432 ;bcr portb,7
00F4 0433 bcr portb,6
00F5 0434 NOP
00F6 0435 call Delay250us
00F7 0436 call Delay250us
0437 ;bcr portb,7
0438 ;bsr portb,7
00F8 0439 bsr portb,6
00F9 0440 call Delay250us
00FA 0441 call Delay250us
00FB 0442 call Delay250us ;延时250us
00FC 0443 call Delay250us ;延时250us
00FD 0444 NOP
0445 OK:
00FE 0446 decrsz Bits,1
00FF 0447 goto Send_8_Bits
0100 0448 return
0449
0450 ;-------------------------------------------
0451 Delay250us:
0101 0452 movia 80 ;82
0102 0453 movar count1
0454 loop1:
0103 0455 decrsz count1,1
0104 0456 goto loop1 ;延时=[2+(82*3-1)+3]*1uS=250uS
0105 0457 nop
0106 0458 return
0459
0460 ;-------------------------------------------
0461 Delay60us:
0107 0462 movia 19
0108 0463 movar count1
0464 loop2:
0109 0465 decrsz count1,1
010A 0466 goto loop2 ;延时=[2+(19*3-1)+3]*1uS=61uS
010B 0467 nop
010C 0468 return
0469 ;--------------------------------------------
0470 ;-------------------------------------------
0471 Delay10us:
010D 0472 movia 2
010E 0473 movar count1
0474 loop:
010F 0475 decrsz count1,1
0110 0476 goto loop ;延时=[2+(2*3-1)+3]*1uS=10uS
0111 0477 nop
0112 0478 return
0479 ;--------------------------------------------
0480 Debounce:
0113 0481 movia 68
0114 0482 movar count2
0483 counter2:
0115 0484 movia 100
0116 0485 movar count1
0486 counter1:
0117 0487 decrsz count1,1
0118 0488 goto counter1 ;指令周期=4Fosc=4*1/4M=1uS
0119 0489 decrsz count2,1 ;指令执行次数=2+[2+(3*100-1)]*68+2=20472
011A 0490 goto counter2 ;延时去抖动时间=(1/4M*4)*20402=20.4ms
011B 0491 return
0492
0493
0494 ;*******************************************************************
0495 ;function name: ClearRAM
0496 ;description: clear the RAM 010h--03fh after reset
0497 ;input: none
0498 ;output: none
0499 ;****************************************
0500 ClrRAM:
011C 0501 movia 010h
011D 0502 movar fsr ;Fsr指向10h
0503 Again:
011E 0504 clrr indf
011F 0505 incr fsr,1
0120 0506 movr fsr,0
0121 0507 andia 03fh
0122 0508 xoria 03fh
0123 0509 btrss status,z
0124 0510 goto Again
0125 0511 return
0512
0513 ;***********************************************************************
0514 ;function name: Define_Register
0515 ;description: Define_Register
0516 ;input: none
0517 ;output: none
0518 ;****************************************
0519 Define_Register:
0126 0520 movia 020h
0127 0521 movar pcon ;bit.5=1,enable LVDT;bit.7=0,disable WDT;disable ROC;bit.6=0,select IOB0
0128 0522 clra ;ACC=00000000b
0129 0523 movar pdcon ;enable the internal pull-down of the pins of IOA3-0 and IOB3-0
012A 0524 movar odcon ;disable the internal open-drain of all pins of IOB
012B 0525 bsr wucon,1
0526 ; movar phcon ;enable the internal pull-high of all pins of IOB
012C 0527 movia 00Ah ;00001010b
012D 0528 iost porta ;IOA3 .1 input mode ,IOA2.0 output mode
012E 0529 bsr porta,2 ; IOA2=1 , ON
012F 0530 movia ON
0130 0531 movar BH1415_State
0131 0532 movia 01fh ;00011111b
0132 0533 iost portb ;IOB5-7 output mode;IOB4-0 input mode
0133 0534 movar portb_state
0134 0535 movia 087h ;00000011b
0135 0536 movar inten ;bit.0=1,enable the Timer0 overflow interrup;bit.1=1,enable the IOB input chang interrup
0136 0537 clrr intflag
0137 0538 bcr porta,0
0138 0539 bsr portb,6
0139 0540 bsr portb,7
0541 ;------------------------
013A 0542 movia 07h ;选择TMR0,分频系数1:256,从00h计到0ffh
013B 0543 option ;计数器溢出时间=256*256*1uS=65.5mS
0544 ;------------------------
013C 0545 return
0546
0547 ;-----------------------------------------------------------------------
0548 ;function: write a byte to eeprom
0549 ;entrance: eep_data_writen save the writen data,eep_address is to access
0550 ;address
0551 ;input: eep_data_writen
0552 ;output: none
0553 ;status: flg_eep_error=1,wrong
0554 write_eep_1byte:
013D 0555 clrr cnt_eep_wr_error
0556 write_eep_again:
013E 0557 incr cnt_eep_wr_error,1
013F 0558 btrsc cnt_eep_wr_error,5 ;allow writing 32 times
0140 0559 goto write_eep_error
0141 0560 call byte_write
0142 0561 call h_delay60us
0143 0562 call read_eep_1byte
0144 0563 movr eep_data_tmp,0
0145 0564 subar eep_data_writen,0
0146 0565 btrss status,2
0147 0566 goto write_eep_again
0148 0567 clrr flg_eep_error ;write 1 byte to eeprom OK
0149 0568 return
0569 write_eep_error:
014A 0570 movia 1
014B 0571 movar flg_eep_error
014C 0572 return
0573 ;----------------------------------------------------------------------------
0574 ;*********************************************************************
0575 ;function: read a data from specific address
0576 ;entrance:eep_address is to read from this eeprom address
0577 ;result:eep_data_tmp
0578 ;status: flg_eep_error=0,OK. =1 is mistake
0579 read_eep_1byte:
014D 0580 clrr cnt_eep_error
0581 random_read_again:
014E 0582 call h_start
0583 ;movia 10100000b ;dummy write
014F 0584 movia 0a0h
0150 0585 movar eep_data_tmp
0151 0586 call h_send_I2C ;??device address 000
0152 0587 call h_delay6us
0153 0588 call h_rec_ack
0154 0589 btrsc flg_eep_error,0
0155 0590 goto random_read_error
0156 0591 call h_delay60us
0592
0157 0593 clrr eep_data_tmp ;??word address:000h
0594 ;movia 001h
0595 ;movar eep_data_tmp
0158 0596 call h_send_I2C
0159 0597 call h_delay6us
015A 0598 call h_rec_ack
015B 0599 btrsc flg_eep_error,0
015C 0600 goto random_read_error
015D 0601 call h_delay6us
0602
015E 0603 movia 010h ;data high
0604 ;iorar prtb_state,0
0605 ;movar portb
015F 0606 iorar portb,1
0607
0160 0608 call h_start
0609
0610 ;movia 10100001b ;??device address
0161 0611 movia 0a1h
0162 0612 movar eep_data_tmp
0163 0613 call h_send_I2C
0164 0614 call h_delay6us
0165 0615 call h_rec_ack
0166 0616 btrsc flg_eep_error,0
0167 0617 goto random_read_error
0618
0168 0619 call h_receive_I2C ;????
0169 0620 call h_no_ack_to_ic
016A 0621 call h_stop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -