FREQUENCY GENERATOR

 

cmpb

buf_cnt,#0

;see if last byte has been sent

 

jne

dec_buf_cnt

;no!

 

ljmp

all_done

;yes!

dec_buf_cnt:

decb

buf_cnt

;decrement byte count

;

 

 

 

get_bit:

andb

flag,#11011111b

;clear get bit flag

 

shlb

shift_reg,#1

;shift MSB into carry flag

 

jc

send_one

;send a one

 

 

 

;else send zero

;

 

 

 

send_zero:

orb

flag,#00000001b

;set zero's flag

 

ldb

wsr,#7BH

;set up EPA

 

ldb

comp3_con_w,#01000000b

 

 

add

comp3_time_w,timer1_w,#zero_time

 

ldb

wsr,#7EH

 

 

orb

p7_mode_w,#10000000b

;start FREQOUT

 

ldb

wsr,zero_reg

 

 

sjmp

done

 

send_one:

 

 

 

 

orb

flag,#00000010b

;set one's flag

 

ldb

wsr,#7BH

;set up EPA

 

ldb

comp3_con_w,#01000000b

 

 

add

comp3_time_w,timer1_w,#one_time

 

ldb

wsr,#7EH

 

 

orb

p7_mode_w,#10000000b

;start FREQOUT

 

ldb

wsr,zero_reg

 

 

sjmp

done

 

;

 

 

 

zero_pause:

andb

flag,#11111110b

;turn off zero flag

 

ldb

wsr,#7EH

 

 

andb

p7_mode_w,#01111111b

;turn off FREQOUT

 

ldb

wsr,#7BH

;set up EPA

 

ldb

comp3_con_w,#01000000b

 

 

add

comp3_time_w,timer1_w,#zero_pause_time

 

ldb

wsr,zero_reg

 

 

sjmp

next

 

;

 

 

 

one_pause:

andb

flag,#11111101b

;turn off one flag

 

ldb

wsr,#7EH

 

 

andb

p7_mode_w,#01111111b

;turn off FREQOUT

 

ldb

wsr,#7BH

;set up EPA

 

ldb

comp3_con_w,#01000000b

 

 

add

comp3_time_w,timer1_w,#one_pause_time

 

ldb

wsr,zero_reg

 

;

 

 

 

next:

decb

bit_cnt

;decrement bit count

 

cmpb

bit_cnt,#00H

;check if 8 bits sent

 

jne

next1

;no, get next bit

 

orb

flag,#01000000b

;yes, get next byte

 

sjmp

done

;done for now

next1:

orb

flag,#00100000b

;set get bit flag

 

sjmp

done

 

;

 

 

 

all_done:

ldb

flag,#00H

;clear all flags

done:

popa

 

 

 

ret

 

 

;

end

8-9

Page 196
Image 196
Intel 8XC196MH, 8XC196MD, 8XC196MC manual Frequency Generator