汇编延时输出随机数

;***********************************************************************
;TITLE 生成20个随机数
;***********************************************************************


;***********************************************************************
;程序运行平台
.386
.MODEL FLAT,STDCALL
option casemap:none
;***********************************************************************

;***********************************************************************
;文件包含
INCLUDE Irvine32.inc
;***********************************************************************


;***********************************************************************
;宏定义
RANDOM_COUNT=20
;***********************************************************************


;***********************************************************************
;数据段定义
.data
rVal dword RANDOM_COUNT dup(0)
strEnter byte 0dh,0ah,0
;***********************************************************************

;***********************************************************************
;代码段定义
.code


;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;函数定义:生成0-40之间的随机数,然后减去20,变成-20~20之间的随机数,而后
;          输出随机数,同时输出换行
GenerateRandom proc uses ecx eax edx
   mov eax,40      
   call RandomRange
   sub eax,20
   call WriteInt
   ;输出换行
   mov edx, offset strEnter
   call WriteString;
   ret;
GenerateRandom endp
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;函数定义:延时过程ffff*ffff
DelayProc proc uses ecx
mov ecx,0ffffh;
 D2:    
    push ecx
 D1: loopd D1;
    pop ecx;
 loopd D2;
  ret;
DelayProc endp
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



main proc
   ;生成随机数种子
   call Randomize
   ;设置范围
   mov ecx,RANDOM_COUNT
   LProc:    
     call DelayProc;
     call GenerateRandom
   loopw LProc
   exit
main endp
end main
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个汇编语言的完整程序,用于控制8个发光二极管的显示。程序使用了定时器中断和外部中断来实现不同的显示模式和切换: ``` ;定义端口地址 P1 equ 0x90 ;P1口连接发光二极管的阳极 P3 equ 0xB0 ;P3口连接开关 ;定义中断向量 ORG 0x0003 ;定时器0中断向量 TIMER0_ISR: ;更新随机数 MOV A, R7 ADD A, #1 MOV R7, A ;跳转到下一种显示模式 INC R5 CJNE R5, #3, L1 MOV R5, #0 L1: RETI ;返回中断 ORG 0x000B ;外部中断0向量 SWITCH_ISR: ;读取开关的状态 MOV A, P3 ANL A, #0x01 CJNE A, #0x01, MODE1 ;如果开关状态为1,跳转到MODE1 CJNE A, #0x00, MODE2 ;如果开关状态为0,跳转到MODE2 MODE1: ;第一种显示模式 MOV R0, #8 ;初始化计数器 MOV R1, #0x01 ;初始化掩码 L2: MOV P1, R1 ;点亮对应的发光二极管 MOV A, #0xFF ;延时 DJNZ A, $ ;延时 CLR P1.0 ;熄灭当前发光二极管 MOV A, #0xFF ;延时 DJNZ A, $ ;延时 RLC R1 ;左移一位,控制下一个发光二极管 DJNZ R0, L2 ;循环 JMP SWITCH_ISR ;跳转回中断 MODE2: ;第二种显示模式 MOV R0, #8 ;初始化计数器 L3: MOV A, R7 ;获取随机数 ANL A, #0x07 ;将A与0x07进行按位与操作,保证结果在0~7之间 MOV R6, A ;将结果存入R6寄存器 MOV A, #0x01 ;将A清零 RL A ;将A左移R6次 MOV P1, A ;点亮对应的发光二极管 MOV A, #0xFF ;延时 DJNZ A, $ ;延时 CLR P1.0 ;熄灭当前发光二极管 MOV A, #0xFF ;延时 DJNZ A, $ ;延时 DJNZ R0, L3 ;循环 JMP SWITCH_ISR ;跳转回中断 ;初始化程序 START: ;初始化端口方向(P1为输出,P3的第0位为输入) MOV P1, #0x00 MOV P3, #0xFF ;初始化定时器0(工作模式1,自动重装,12分频,计数初值为65535-1500=64035) MOV TMOD, #0x01 MOV TH0, #0xFC MOV TL0, #0x8B ;初始化中断向量表 MOV IE, #0x82 ;开启定时器0中断和外部中断0 MOV R5, #0 ;初始化显示模式计数器 MOV R7, #0 ;初始化随机数 ;进入主程序循环 LOOP: JMP LOOP ``` 在程序中,定时器0中断用于更新随机数,外部中断0用于检测开关的状态并切换不同的显示模式。MODE1和MODE2分别是两种不同的显示模式的代码逻辑。在初始化程序中,需要先设置端口方向和定时器0的计数初值,并且开启定时器0中断和外部中断0。最后,进入主程序循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值