http://zhidao.baidu.com/link?url=7X32O3i8QKFTSqEZo9W2N45XqGpANh3RuvXlz0aSs4DfUagbHjrZvdatAvsivcE_2ZRyO4NMkkOCCEgMj5_Lpq
MOV DX,PORTDMOV AL,0FFHRepeat:INC ALOUT DX,ALJMP Repeat若改变锯齿波周期,可用NOP或延时指令控制,如下: MOV DX,PORTD MOV AL,0FFHRepeat:INC AL OUT DX,AL CALL DELAY1 JMP RepeatDELAY1:MOV CX,DATA1DELAY2:LOOP DELAY2 RET产生三角波形将线性增长段和线性下降段结合起来,便可产生三角波形。程序如下: MOV AL,25H ;设定8255A的A口为输出方式 MOV DX,0DH OUT DX,AL MOV DX,0AH MOV AL,00H ;送下限值SJ0: OUT DX,AL ;将数据输出到A口 INC AL ;AL加1 JNZ SJ0 ;上限为FFH,没到上限,继续循环SJ1: DEC AL ;到上限,AL减1 OUT DX ,AL JNZ SJ1 ;若没到下限,转SJ1继续减1输出 JMP SJ0 ;到下限,转SJ0重新从下限开始产生梯形茄旅波形 MOV AL,25H ;设定8255A的A口为帆纳腔输出方式 MOV DX,0DH OUT DX,AL MOV DX,0AH MOV AL,00H ;从0开始 OUT DX,AL ;将数据输出到A口TX0: INC AL ;AL加1 OUT DX,ALCMP AL,0FFH ;检查到上限否 JNZ TX0 ;上限为FFH,没到上限态衫,继续循坏 MOV CX,0FFH ;上限到,延时TX1: NOP LOOP TX1TX2: DEC AL ; AL减1 OUT DX ,AL CMP AL,00H ;检查到下限否 JNZ TX2 ;上限为00H,没到下限,继续循环 MOV CX,0FFH ;下限到,延时TX3: NOP LOOP TX3 JMP TX0 ;转TX0开始下一个周期
定时程序我知道,给你发个例子吧:此程序段针对8086cpu和8253时间节拍芯片
1 mov al, 36h 给43h端口一个36h命令
2 mov edx, 43h
3 out dx, al
4 mov eax, 11930 设定时间间隔,大概是100毫秒
5 mov edx, 40h发送一次时间中断IR0
6 out dx, al
7 mov al, ah
8 out dx, al
说明:从5开始,可以发现,是把al放入40h口一次,把ah放入猛肢40h口一次,也就是把11930这个数分两部分,挨个放入40h,因为端口读写都是8位的,不要见怪。
给43h发送的36h是用来设定方波发射器的工作方式。
cpu的外部芯片有很多种,汇编程序旅知好设计需要了解这些芯片,对它们的控制方式就是通过端口发送命令,他们返回的结果,通常是通过8259A中断控制器的IRQx通道,向cpu提出中断。
以响应该芯片的处拆铅理结果,和函数差不多。
希望对你有帮助,需要进一步讲解,请补充提问。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)