⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 run.asm

📁 一款智能老鼠的玩具源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;	sta	temp_flg_ir_received
;	ret
;;================================================================;
;;****************************************************************;
;; IR Judge
;
;; Carrier Frequency: 38K
;; IR transmit output pin: PRTC[0]
;; IR receive input pins: PRTD[0](front side)
;;                        PRTD[1](left side)
;;                        PRTD[2](right side)
;;
;; Written by: lixy
;; Date: 2004-04-08
;;****************************************************************;
;
;;================================================================;
;;Constant Area
;;================================================================;
;c_prtc012_1		equ	#00000111b
;c_prtc012_0		equ	#11111000b
;
;c_prtd012_1		equ	#00000111b
;c_prtd0_1		equ	#00000001b
;c_prtd0_0		equ	#11111110b
;c_prtd1_1		equ	#00000010b
;c_prtd1_0		equ	#11111101b
;c_prtd2_1		equ	#00000100b
;c_prtd2_0		equ	#11111011b

;;c_38k_pulse		equ	#22		;the total number of 38k IR pulse transmitted(23*26us=598us)
;;//04-03-17// revise the ir groups total number (primer value is 20)
;;c_ir_group		equ	#12		;the interval between 38k pulse groups in one IR group
;;end revise //04-03-17//
;c_ir_rcv_f		equ	#10
;c_ir_rcv_l		equ	#10
;c_ir_rcv_r		equ	#10
;c_flg_f_rcved		equ	#1		;表示前面有障碍物
;c_flg_l_rcved		equ	#2		;表示左面有障碍物
;c_flg_r_rcved		equ	#3		;表示右边有障碍物
;c_flg_f_l_rcved		equ	#4		;表示前左有障碍物
;c_flg_f_r_rcved		equ	#5		;表示前右有障碍物
;c_flg_l_r_rcved		equ	#6		;表示左右有障碍物
;c_flg_f_l_r_rcved	equ	#7		;表示前左右都有障碍物

;c_offset_f		equ	#0
;;--------------------------------------以下为左转的开始偏移
;c_offset_l_20		equ	#72		;=9(row)*8(column) left 20 degree
;c_offset_l_40		equ	#80		;=10(row)*8(column) left 40 degree
;c_offset_l_60		equ	#88		;=11(row)*8(column) left 60 degree
;c_offset_l_80		equ	#96		;=12(row)*8(column) left 80 degree
;c_offset_l_100		equ	#104		;=13(row)*8(column) left 100 degree
;c_offset_l_120		equ	#112		;=14(row)*8(column) left 120 degree
;;--------------------------------------以下为右转的开始偏移
;c_offset_r_20		equ	#144		;=18(row)*8(column) right 20 degree
;c_offset_r_40		equ	#152		;=19(row)*8(column) right 40 degree
;c_offset_r_60		equ	#160		;=20(row)*8(column) right 60 degree
;c_offset_r_80		equ	#168		;=21(row)*8(column) right 80 degree
;c_offset_r_100		equ	#176		;=22(row)*8(column) right 100 degree
;c_offset_r_120		equ	#184		;=23(row)*8(column) right 120 degree
;;;-------------------------------------以下为红外左右转表的开始偏移
;;//04-03-17// add for swerve when detceting the obstacles
;c_offset_l_20_ir	equ	#240		;=30(row)*8(column) left 20 degree
;c_offset_l_40_ir	equ	#248		;=31(row)*8(column) left 40 degree
;c_offset_l_60_ir	equ	#256		;=32(row)*8(column) left 60 degree
;c_offset_r_20_ir	equ	#312		;=39(row)*8(column) right 20 degree
;c_offset_r_40_ir	equ	#320		;=40(row)*8(column) right 40 degree
;c_offset_r_60_ir	equ	#328		;=41(row)*8(column) right 60 degree
;;end adding //04-03-17//

;c_rnd_range_1		equ	#1		;random number range is 1
;c_rnd_range_2		equ	#2		;random number range is 2
;c_rnd_range_3		equ	#3		;random number range is 3
;c_rnd_range_4		equ	#4		;random number range is 4
;c_rnd_range_5		equ	#5		;random number range is 5
;c_rnd_range_6		equ	#6		;random number range is 6
;c_rnd_range_8		equ	#8		;random number range is 8

;c_delay_short		equ	#120		;delay short constant

;;================================================================;
;IR Data Area
;================================================================;
;       .area       ir_judge_var(data)
;
;flg_ir_received::	.ds	1	;接收后的状态(0-7表示)(哪个地方有障外)the flag of received IR
;flg_l_or_r::		.ds	1	;the flag of turn left or turn right when detect obstacles in front or front-left-right of the mouse 
;;cnt_38k_pulse::	.ds	1	;IR transmitted pulse counter
;;cnt_ir_group::		.ds	1
;cnt_ir_rcv_f::		.ds	1
;cnt_ir_rcv_l::		.ds	1
;cnt_ir_rcv_r::		.ds	1
;;temp_delay_short::	.ds	1	;short delay variable

;================================================================;
;IR Code Area
;================================================================;
;       .area       ir_judge_code(code)
       
;*********************************************************************
; intput:flg_motor_status,flg_ir_judge(接收是否完成)
;	cnt_ir_rcv_f,cnt_ir_rcv_l,cnt_ir_rcv_r(中,左,右接收的红外个数)
;
; output:
;*********************************************************************
;ir_judge::
;
;if_judge_ir:
;	lda	flg_ir_judge		;if judge IR?(是否接收发射完成了?)
;	cmpe	#1
;	brnz	ir_judge_end
;
;	lda	#0
;	sta	flg_ir_judge
;judge_ir:
;	call	ir_received_judge	;接收判断子程序

;;************/*04-02-26*/***************;
;	lda	flg_ir_received
;	cmpe	#c_flg_f_rcved
;	brz	judge_ir_end
;	cmpe	#c_flg_f_l_r_rcved
;	brz	judge_ir_end
;
;	lda	flg_l_or_r
;	xora	#1
;	sta	flg_l_or_r
;;***************************************;
;judge_ir_end:
;;	lda	#0			;clear the flag and the counters
;;	sta	cnt_ir_group
;;	sta	cnt_ir_rcv_f
;;	sta	cnt_ir_rcv_l
;;	sta	cnt_ir_rcv_r
;ir_judge_end:
;	ret
	
;;----------------------------------------------------------------;
;;IR Received Judge Subroutine接收判断子程序
;;----------------------------------------------------------------;
;ir_received_judge::

;f_judge:
;	lda	cnt_ir_rcv_f
;	cmpe	#c_ir_rcv_f
;	brnc	f_no_l_judge
;
;f_yes_l_judge:
;	lda	cnt_ir_rcv_l
;	cmpe	#c_ir_rcv_l
;	brnc	f_yes_l_no_r_judge
;
;f_yes_l_yes_r_judge:
;	lda	cnt_ir_rcv_r
;	cmpe	#c_ir_rcv_r
;	brnc	f_yes_l_yes_r_no
;	
;;*************/*04-02-26*/**************;
;f_yes_l_yes_r_yes:
;	lda	#c_flg_f_l_r_rcved	;左右前方有障碍,左转或右转
;	sta	flg_ir_received
;  	lda	flg_l_or_r
;	anda	#1
;	brnz	f_l_r_turn_right	;0 turn left, 1 turn right
;f_l_r_turn_left:			;左转;//04-03-17// revise the initial offset
;	lda	#>c_offset_l_40_ir	;为什么这样写>(可能是想表明这里是送进查表里的)
;	sta	m_offset_ini_h		;查表地址开始值
;	lda	#<c_offset_l_40_ir
;	sta	m_offset_ini
;	lda	#c_rnd_range_1
;	sta	m_rnd_range		;m_rnd_range为所求的随机数的大小
;	br	ir_received_set
;f_l_r_turn_right:			;右转
;	lda	#>c_offset_r_40_ir
;	sta	m_offset_ini_h
;	lda	#<c_offset_r_40_ir
;	sta	m_offset_ini
;	lda	#c_rnd_range_1
;	sta	m_rnd_range
;	br	ir_received_set
;;***************************************;
;   
;f_yes_l_yes_r_no:
;	lda	#c_flg_f_l_rcved	;左前方有障碍,右转
;	sta	flg_ir_received
;       lda	#>c_offset_r_40_ir
;	sta	m_offset_ini_h
;	lda	#<c_offset_r_40_ir
;	sta	m_offset_ini
;	lda	#c_rnd_range_1
;	sta	m_rnd_range
;	br	ir_received_set
;f_yes_l_no_r_judge:
;	lda	cnt_ir_rcv_r
;	cmpe	#c_ir_rcv_r
;	brnc	f_yes_l_no_r_no
;f_yes_l_no_r_yes:
;	lda	#c_flg_f_r_rcved	;右前方有障碍,左转
;	sta	flg_ir_received
;        lda	#>c_offset_l_40_ir
;	sta	m_offset_ini_h
;	lda	#<c_offset_l_40_ir
;	sta	m_offset_ini
;	lda	#c_rnd_range_1
;	sta	m_rnd_range
;	br	ir_received_set
; f_yes_l_no_r_no:
;	lda	#c_flg_f_rcved		;前方有障碍,左转或右转
;	sta	flg_ir_received
;;*************/*04-02-26*/**************;
;	lda	flg_l_or_r
;	anda	#1
;	brnz	f_turn_right		;0 turn left, 1 turn right
;f_turn_left:				;左转
;	lda	#>c_offset_l_40_ir
;	sta	m_offset_ini_h
;	lda	#<c_offset_l_40_ir
;	sta	m_offset_ini
;	lda	#c_rnd_range_1
;	sta	m_rnd_range
;	br	ir_received_set
;f_turn_right:				;右转
;	lda	#>c_offset_r_40_ir
;	sta	m_offset_ini_h
;	lda	#<c_offset_r_40_ir
;	sta	m_offset_ini
;	lda	#c_rnd_range_1
;	sta	m_rnd_range
;	br	ir_received_set
;;No Front ***************************************;
;f_no_l_judge:
;	lda	cnt_ir_rcv_l
;	cmpe	#c_ir_rcv_l
;	brnc	f_no_l_no_r_judge
;f_no_l_yes_r_judge:
;	lda	cnt_ir_rcv_r
;	cmpe	#c_ir_rcv_r
;	brnc	f_no_l_yes_r_no
;f_no_l_yes_r_yes:
;	lda	#c_flg_l_r_rcved	;左右方有障碍,前行
;	sta	flg_ir_received
;	lda	#c_offset_f
;	sta	m_offset_ini
;	lda	#c_rnd_range_8
;	sta	m_rnd_range
;	br	ir_received_set
;f_no_l_yes_r_no:
;	lda	#c_flg_l_rcved		;左方有障碍,右转
;	sta	flg_ir_received
;	lda	#>c_offset_r_40_ir
;	sta	m_offset_ini_h
;	lda	#<c_offset_r_40_ir
;	sta	m_offset_ini
;	lda	#c_rnd_range_1
;	sta	m_rnd_range
;	br	ir_received_set
;f_no_l_no_r_judge:
;	lda	cnt_ir_rcv_r
;	cmpe	#c_ir_rcv_r
;	brnc	f_no_l_no_r_no
;f_no_l_no_r_yes:
;	lda	#c_flg_r_rcved		;右方有障碍,左转
;	sta	flg_ir_received
;	lda	#>c_offset_l_40_ir
;	sta	m_offset_ini_h
;	lda	#<c_offset_l_40_ir
;	sta	m_offset_ini
;	lda	#c_rnd_range_1
;	sta	m_rnd_range
;	br	ir_received_set
;f_no_l_no_r_no:
;	lda	#0			;没有障碍
;	sta	flg_ir_received
;	ret
;ir_received_set:			;/*04-02-19*/
;	lda	#2			;有IR时产生新随机数的标志为2
;	sta	flg_new_random
;	lda	#0
;	sta	cnt_ctrl_pulse		;clear control pulse counter in Timer1 Service Routine.
;	sta	cnt_ctrl_pulse+1	;/*04-02-23*/
;ir_received_judge_end:
;	ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -