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

📄 ztsystem_normal.asm

📁 自己写的一个可以烧录到单片机的用于软件模拟串行通信的汇编源码。
💻 ASM
字号:
		include Ht46r24.inc
		ORG 0000H
		JMP MAIN
    	ORG 00CH
		JMP TIM1
		ORG 0100H

MAIN:   	
;***********定时器初始化********************
			MOV A,0B0H
			MOV TMR1L,A
			MOV A,3CH
			MOV TMR1H,A				;装载定时器初始值。
  		    MOV A,80H
			MOV TMR1C,A				;设置TIMER1为定时模式。
;************初始化结束**********************
;************显示部分计数值******************			
jixu:		MOV A,200
			MOV [88H],A	 			;定时中断次数200次.
;***************结束*************************
;***************接收主程序*******************
receive:CLR PCC
		set pc.2
		call delay104
WAITF:  set pcc
		MOV A,Pc
        AND A,04H     		 ;取出接收到的位
	    MOV [45H],A   		 ;45H保存接收到的数据
		SZ [45H]      		 ;判断接收到的数据是否为0
        JMP WAITF    		  ;不为0继续等待
        CALL DELAY52  		 ;为0等待52us再判断确认
        MOV A,Pc		
        AND A,04H
        MOV [46H],A
        SZ [46H]      		 ;再次确认是否收到0
        JMP WAITF
		MOV A,07H
        MOV [47H],A    	   	 ;47h用于控制一共接收8次
        CALL DELAY104    	 ;确实收到0继续接收数据
        MOV A,Pc
		AND A,04H
        MOV [48H],A    		 ;48H用于保存接收到的数据
		NOP
		NOP
F3:     CALL DELAY100
        RR [48H]
	    MOV A,PC
		AND A,04H
        ADDM A,[48H]
        SDZ  [47H]
        JMP F3
CORRECT:RR [48H]
		RR [48H]
		rr [48h]
;********接收数据结束,置于48h单元***********
		mov a,[48h]
		mov [4fh],a
		sz [4fh]
		jmp right
		jmp waitf
;************判断是否上下行是否符合**********
right:    mov a,[48h]
		and a,40h
		mov [4bh],a
		sz [4bh]
		jmp waitf		         ;不是本站车,跳回接收主程序...1出错,0正确.
		jmp dui	         ;是本站车
;****************奇偶校验******************
dui:    mov a,[48h]
		mov [49h],a
		mov a,08h
		mov [4ah],a		;循环计数值.
		clr [50h]		;8位相加的值存放单元.
next0:	mov a,01h
		and a,[49h]
		addm a,[50h]
		rr [49h]
		sdz [4ah]
		jmp next0
		mov a,01h
		and a,[50h]
		mov [51h],a
		sz [51h]
		jmp waitf		;不满足奇偶校验,返回继续接收.
		jmp send		;校验无误,发送数据.
;************发送程序*************************
send:   mov a,[48h]
		mov [41h],a			;将接收到的数据存于41h
		clr pcc
        set pc.0			;先将端口置1,除去干扰.
		call delay104
step1:	mov a,09h			;发送8次,要用9,先减1再判断是否为0.
		mov [40h],a			;40h作为发送数据计数器.
		clr pc.0			;发送起始位.
		call delay104
step2:  mov a,[41h]
		and a,01h
		mov [42h],a
		rr [41h]
		sdz [40h]
		jmp step3
		jmp step4			;数据发送完成.
step3:  sz [42h]
		jmp num1
		jmp num0
num1:	set pc.0
		call delay97
		jmp step2
num0:	clr pc.0
		call delay97
		jmp step2
step4:	set pc.0
		call delay104
		call delay104			;少了这条指令会出错.
;********发送数据结束*******************
;*************路线查询******************		
			mov a,[48h]
			and a,0fh
		    MOV [81H],A				;取出要显示的数值的低四位.
			mov a,18
			mov [70h],a				;循环次数为显示次数加2.显示部分....
	     	mov a,00h
			mov [85h],a				;从0开始查询.
STEP5:		mov a,[85h]
			xor a,[81h]
			mov [82h],a
			SDZ [70H]
			jmp next
			jmp done
next:		SZ [82H]		
			JMP STEP7
			mov a,[85h]
			CALL TABLE
			clr pbc
			mov pb,a
            SET EMI
			SET	ET1I
			SET T1ON
			jmp done
STEP7:	    INC [85h]     
			JMP STEP5
done:		jmp jixu
;************延时104us子程序***************
DELAY104: MOV A,68
          MOV [60H],A;
          NOP;
LOOP2:    SDZ [60H];
          JMP LOOP2
          RET
;************延时52ms子程序****************
DELAY52:  MOV A,33
          MOV [61H],A
          NOP
          NOP
LOOP1: 	  SDZ [61H];
          JMP LOOP1;
          RET;
;************延时101us子程序***************
DELAY100: MOV A,66
          MOV [62H],A;
          NOP;
LOOP3:    SDZ [62H];
          JMP LOOP3
          RET
;************延时97us子程序***************
DELAY97:  MOV A,63
          MOV [63H],A;
          NOP;
LOOP4:    SDZ [63H];
          JMP LOOP4
          RET
;************定时器1中断子程序**************
TIM1:		SDZ [88H]
			JMP OUT
			MOV A,0FFH
			MOV PB,A
OUT:		RETI
;***********表格区********
TABLE:	        ADDM A,PCL				
				ret a,0c0h
				RET A,0f9H
				RET A,0a4H	
				RET A,0b0H
				RET A,99H
				RET A,92H
				ret a,82h
				ret a,0f8h
				ret a,80h
				ret a,90h
				ret a,88h
				ret a,83h
				ret a,0c6h
				ret a,0a1h	
				ret a,86h
				ret a,8eh
END 
      

⌨️ 快捷键说明

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