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

📄 shift.asm

📁 在定时器中断中做LED的PWM输出 AT89C2051实现A/D转换的C51程序 单片机开发系统 指令系统 程序设计 定时与中断 系统扩展 接口技术 串行口
💻 ASM
字号:
;六字节线性移位寄存器仿真程序(按键接在P1.0)
RANDS	EQU	40H	;六字节线性移位寄存器首址。
RND0	DATA	40H	;第一字节。
RND1	DATA	41H	;第二字节。
RND2	DATA	42H	;第三字节。
RND3	DATA	43H	;第四字节。
RND4	DATA	44H	;第五字节。
RND5	DATA	45H	;第六字节。

X1H	DATA	30H	;系数X1的高字节。
X1L	DATA	31H	;系数X1的低字节。
X2H	DATA	32H	;系数X2的高字节。
X2L	DATA	33H	;系数X2的低字节。
Y1	DATA	34H	;系数Y1。
Y2	DATA	35H	;系数Y2。

	ORG	0000H
	LJMP	TEST
	
	ORG	100H
TEST:	MOV	TMOD,#11H	;将T0设置为16位定时器工作方式。
	SETB	TR0		;启动T0。
	MOV	P1,#0FFH
LOOP:	JB	P1.0,LOOP	;未按键,继续循环。
	MOV	RND5,RND3	;发生按键操作,处理线性移位寄存器。
	MOV	RND4,RND2
	MOV	RND3,RND1
	MOV	RND2,RND0
	MOV	RND1,TH0  	;将定时器的当前内容放入移位寄存器中。
	MOV	RND0,TL0  
	LCALL	RUN		;转动“数字转盘”一格。
	LCALL	RUN		;再转动“数字转盘”一格。
	LCALL	RUN		;再转动“数字转盘”一格。
	MOV	X1H,RND0	;读取随机数,给系数X1赋值。
	MOV	X1L,RND1
	MOV	X2H,RND2	;读取随机数,给系数X2赋值。
	MOV	X2L,RND3
	MOV	Y1,RND4		;读取随机数,给系数Y1赋值。
	MOV	Y2,RND5		;读取随机数,给系数Y2赋值。
STOP:	LJMP	STOP

RUN:	MOV	A,RND5		;取D41~D48的当前状态。
	RLC	A		;将d48提取到进位标志中。
	MOV	A,RND0		;取D1~D8的当前状态。
	ANL	A,#5BH		;提取d7,d5,d4,d2和d1的当前值。
	MOV	ACC.7,C		;再加上d48的当前值。
	MOV	C,PSW.0		;取得偶校验的结果。
	CPL	C		;转换成奇校验结果,得到反馈函数的输出值。
	MOV	A,RND0		;开始移位操作,先处理低字节。
	RLC	A		;将反馈函数的输出值移入,最高位移出。
	MOV	RND0,A		;保存移位后的结果。
	MOV	A,RND1		;再依次进行其它各字节的移位操作。
	RLC	A
	MOV	RND1,A
	MOV	A,RND2
	RLC	A
	MOV	RND2,A
	MOV	A,RND3
	RLC	A
	MOV	RND3,A
	MOV	A,RND4
	RLC	A
	MOV	RND4,A
	MOV	A,RND5
	RLC	A
	MOV	RND5,A
	RET			;完成一次操作,巨型“数字转盘”转动一格。

	END

⌨️ 快捷键说明

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