.chip TM87P08 .data temp_buff1 equ 10h temp_buff2 equ 11h temp_buff3 equ 12h temp_buff4 equ 13h temp_buff5 equ 14h temp_buff6 equ 15h radio_data0 equ 30h radio_data1 equ 31h radio_data2 equ 32h radio_data3 equ 33h f_back equ 34h memory0 equ 35h memory1 equ 36h store_up_t equ 37h draw_out_t equ 38h mem_full equ 39h delay_flag equ 3ah l_radio_flag equ 3bh .endd .code org 00h jmp check_sram org 30h start: lds 00h,00h lds 01h,00h lds 02h,00h lds 03h,00h lds 04h,00h lds 05h,00h lds 06h,00h lds 07h,00h lds 08h,00h lds 09h,00h lds 0ah,00h lds 0bh,00h lds 0ch,00h lds 0dh,00h lds 0eh,00h lds 0fh,00h lds 30h,02h lds 31h,05h lds 32h,04h lds 33h,04h lds 34h,00h lds 35h,00h lds 36h,00h lds 37h,00h lds 38h,00h lds 39h,00h lds temp_buff6,04h call swap_reg_data jmp keyboard ;************************************************** check_sram: lds 70h,04h eor 15h jnz start1 lds 70h,0ch eor 20h jnz start1 lds 70h,0eh eor 24h jnz start1 lds 70h,07h eor 28h jnz start1 lds 70h,02h eor 2ch jnz start1 lds 70h,03h eor 2fh jnz start1 call swap_reg_data ;call delay_1s jmp keyboard start1: lds 15h,04h lds 20h,0ch lds 24h,0eh lds 28h,07h lds 2ch,02h lds 2fh,03h jmp start ;*************************************************** ; 30h~34h reg data move 00h~0fh reg swap_reg_data: fast lds 70h,00h lda 30h sta temp_buff1 lda 31h sta temp_buff2 lda 32h sta temp_buff3 lda 33h sta temp_buff4 mvl 70h mvh 70h mvu 70h lds temp_buff5,04h swap1: lds 70h,0eh or temp_buff1 sta# @hl sr0 temp_buff1 dec* temp_buff5 jnz swap1 lds temp_buff5,04h swap2: lds 70h,0eh or temp_buff2 sta# @hl sr0 temp_buff2 dec* temp_buff5 jnz swap2 lds temp_buff5,04h swap3: lds 70h,0eh or temp_buff3 sta# @hl sr0 temp_buff3 dec* temp_buff5 jnz swap3 lds temp_buff5,04h swap4: lds 70h,0eh or temp_buff4 sta# @hl sr0 temp_buff4 dec* temp_buff5 jnz swap4 lds 70h,00h opa 70h spa 0fh send_radio_data: opas 00h,0 opas 01h,0 opas 02h,0 opas 03h,0 opas 04h,0 opas 05h,0 opas 06h,0 opas 07h,0 opas 08h,0 opas 09h,0 opas 0ah,0 opas 0bh,0 opas 0ch,0 opas 0dh,0 opas 0eh,0 opas 0fh,0 lds 00h,01h and* 0fh opa 0fh opa 70h slow rts ;******** add_14 ***************** scan_add14: lda temp_buff6 add* radio_data0 jnc a_carry0 inc* radio_data1 jnc a_carry0 inc* radio_data2 jnc a_carry0 inc* radio_data3 a_carry0: inc* radio_data1 jnc a_carry_end inc* radio_data2 jnc a_carry_end inc* radio_data3 a_carry_end: rts ;********************************* compare_up_data: mrw 70h,radio_data0 eori 70h,0ah jnz cud_end mrw 70h,radio_data1 eori 70h,06h jnz cud_end mrw 70h,radio_data2 eori 70h,04h jnz cud_end mrw 70h,radio_data3 eori 70h,05h jnz cud_end lds radio_data0,02h lds radio_data1,05h lds radio_data2,04h lds radio_data3,04h cud_end: rts ;*********** dec_14 ************** scan_dec14: lda temp_buff6 sub* radio_data0 jc d_carry0 dec* radio_data1 jc d_carry0 dec* radio_data2 jc d_carry0 dec* radio_data3 d_carry0: dec* radio_data1 jc d_carry_end dec* radio_data2 jc d_carry_end dec* radio_data3 d_carry_end: rts ;********************************* compare_dn_data: mrw 70h,radio_data0 eori 70h,0eh jnz cud_end mrw 70h,radio_data1 eori 70h,03h jnz cud_end mrw 70h,radio_data2 eori 70h,04h jnz cud_end mrw 70h,radio_data3 eori 70h,04h jnz cud_end lds radio_data0,06h lds radio_data1,05h lds radio_data2,04h lds radio_data3,05h cdd_end: rts ;*********************************** keyboard: lds 70h,03h opd 70h spd 0fh spc 10h spb 10h call delay_1s key1: spa 0bh ipc 70h jb0 up_step jb1 dn_step jb2 store_data jb3 draw_data ipb 70h jb1 key1 lds 70h,00h opa 70h spa 0fh lds 70h,01h opd 70h sre 20h plc 04h she 04h stop ;call delay_80ms call swap_reg_data lds 70h,07h opd 70h call delay_1s call delay_1s lds 70h,03h opd 70h jmp key1 ;*********************************** up_step: lds l_radio_flag,03h opd l_radio_flag call scan_add14 call compare_up_data call swap_reg_data call up_delay_1s lda delay_flag jb0 sequ_up_step jmp key1 ;************************************ sequ_up_step: call scan_add14 call compare_up_data call swap_reg_data call delay_80ms call latch_ld lda f_back jnz key1 jmp sequ_up_step ;***************************************** ;*********************************** dn_step: lds l_radio_flag,03h opd l_radio_flag call scan_dec14 call compare_dn_data call swap_reg_data call dn_delay_1s lda delay_flag jb0 sequ_dn_step jmp key1 ;************************************ sequ_dn_step: call scan_dec14 call compare_dn_data call swap_reg_data call delay_80ms call latch_ld lda f_back jnz key1 jmp sequ_dn_step ;***************************************** store_data: lds l_radio_flag,07 opd l_radio_flag inc* store_up_t sta 75h call select_num lds 70h,00h mvl memory0 mvh memory1 mvu 70h mrw# @hl,radio_data0 mrw# @hl,radio_data1 mrw# @hl,radio_data2 mrw# @hl,radio_data3 lds 70h,06h lda store_up_t sta draw_out_t eor 70h jnz store_end lds store_up_t,00h lds mem_full,01h store_end: call delay_1s lds l_radio_flag,03 opd l_radio_flag jmp key1 ;***************************************** draw_data: lds l_radio_flag,07 opd l_radio_flag lda draw_out_t jz draw_end sta 75h call select_num lds 70h,00h mvl memory0 mvh memory1 mvu 70h mwr# radio_data0,@hl mwr# radio_data1,@hl mwr# radio_data2,@hl mwr# radio_data3,@hl call swap_reg_data dec* draw_out_t jnz draw_end lda mem_full jz draw_out0 lds draw_out_t,06h jmp draw_end draw_out0: lda store_up_t sta draw_out_t draw_end: call delay_1s lds l_radio_flag,03 opd l_radio_flag jmp key1 ;***************************************** select_num: dec* 75h jz sele_num0 dec* 75h jz sele_num1 dec* 75h jz sele_num2 dec* 75h jz sele_num3 dec* 75h jz sele_num4 lds memory0,04h lds memory1,08h jmp sele_end sele_num0: lds memory0,00h lds memory1,08h jmp sele_end sele_num1: lds memory0,04h lds memory1,08h jmp sele_end sele_num2: lds memory0,08h lds memory1,08h jmp sele_end sele_num3: lds memory0,0ch lds memory1,08h jmp sele_end sele_num4: lds memory0,00h lds memory1,09h sele_end: rts ;***************************************** latch_ld: lds 71h,05h latch_d0: ipb 72h jb0 latch_d1 jmp lat_delay latch_d1: call delay_10ms dec* 71h jnz latch_d0 lds f_back,01h lds l_radio_flag,07h opd l_radio_flag jmp latch_end lat_delay: call delay_10ms dec* 71h jnz lat_delay lds f_back,00h lds l_radio_flag,03h opd l_radio_flag latch_end: rts ;************* delay=1s **************** up_delay_1s: lds 71h,06h up_time0: dec* 71h jz up_time_end call delay_200ms ipc 70h jb0 up_time0 lds delay_flag,00h rts up_time_end: lds delay_flag,01h rts ;************* delay=1s **************** dn_delay_1s: lds 71h,06h dn_time0: dec* 71h jz dn_time_end call delay_200ms ipc 70h jb1 dn_time0 lds delay_flag,00h rts dn_time_end: lds delay_flag,01h rts ;*********** delay=80ms ************** delay_80ms: plc 02h she 02h tmsx 101010100b halt rts ;*********************************** ;*********** delay=1s *********** delay_1s: plc 02h she 02h tmsx 111000001b halt rts ;*********************************** ;*********** delay=9.52ms *********** delay_10ms: plc 02h she 02h tmsx 100001001b halt nop rts ;************************************ ;************ delay=200ms********** delay_200ms: plc 02h she 02h tmsx 000001101b halt rts .endc .table .endt