学完C语言和汇编,发现有2个急待解决的问题。
汇编有没单片机那样的定时器中断,比如计算晶振精确定时。C语言教程里没讲中断,但万能的C语言应该有中断,如果有如何使用呢?这两个问题自感觉很关键。谁可帮我解决。请讲的详细些,谢谢。 在DOS下用到定时功能一般有2种,一是空循环来实现二是截获时钟中断计算机的硬件时钟会中断以每55ms一次的频率触发8号中断 难,我是无法回答,虽然我做过学校单片机的中断实验。可惜我不会,哎,帮不上忙了。:loveliness: 首先,你说的几点都是没搞清楚方向。
汇编有很多种,在PC上实现的比如 DOS WIN32汇编, 在单片机上有 51 ARM汇编。
单片机可以用C语言写,也可以用汇编写。
51汇编的定时中断调用:
最好看下51单片机的书
;*******************************不同类型的单片机对应的地址不同
ORG 0000H
LJMP MAIN ;主函数
ORG 0003H
LJMP KEYINT ;按键扫描处理函数
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
LJMP T2INT ;定时器2中断
ORG 003BH
LJMP HSINT ;串口中断
;*******************************
ORG 0100H
;----------------------------------
MAIN:
MOV SP,#6AH
CLR RS0
CLR RS1
MOV IE,#01100001B ; SINTNO / HSINT YES
MOV IP,#01000000B
MOV TCON,#00000000B ;后沿触发
MOV TMOD,#00100101B ;8 BIT
MOV CKCON,#07H
MOV TH0,#00H
MOV TL0,#00H
MOV T2CON,#00000000B
MOV RCAP2H,#00H
MOV RCAP2L,#00H
MOV P1,#0FFH
MOV DALNUM,#00
T2INT:
CLR TF2
CLR TR2
CLR EA
PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
SETB EA
INC DALNUM
MOV A,DALNUM
CLR C
SUBB A,#04H
JC T2RET
LCALL CLKF
RETI
实现调用就可以了
中断的话 在PC上和单片机上不一样的
DOS 上的INTWIN32把中断封装在函数里了
单片机的中断C语言的话设定相应的状态寄存器 单片机用寄存器来记录机器周期我知道了,我想知道的是PC机上的X86汇编有没这种精确定时功能,比如要做个游戏,总不能用无用指令来浪费时间吧,那样CPU超下频就不准了。还有就是如果用C语言写个DOS游戏,要时刻准备接受操作的响应,但我现在学完了零基础C语言,发现C的指令是一条条执行下去的,书上没讲该如何响应输入设备。有无C语言使用中断的方法。该不会是写好代码安装中断例程吧,C能很好的响应吗? 在PC上用到的基本是 API函数的调用。有些函数里面已经做好了中断的封装 API中的SetTimer函数
单片机应该是电子信息工程专业的学的吧。 wqlovt 发表于 2012-1-2 21:56 static/image/common/back.gif
在DOS下用到定时功能一般有2种,一是空循环来实现二是截获时钟中断计算机的硬件时钟会中断以每55ms一次 ...
我百度过,没找着答案,你肯定费心了,谢谢。 都有中断,高级语言只是把一些中断给封装了。 另外,在Windows系统里,这些中断是受保护的,你不可能任意的去调用中断,如果可以去任意的去调用中断的话,那就跟以前的dos时代没什么两样,一些不法分子可以轻易而举的利用这些中断进行胡作非为。
这方面的知道,你需要先学会汇编,然后你再学习win32时,就能真相大白了,有些东西,在你没有学到之前,跟你是讲不清楚的。
这些中断在Windows系统下,是受保护的,即所为的“保护机制”。好好学,你会明白的。 C语言和汇编你都学了,单单就没学习win32,我想的我答案已经够清楚了,也够详细了。谢谢你将来的鱼币。哈哈~~
高科技,我刚好也不会,受教了啊~~~
页:
[1]