nbceshi 发表于 2012-1-2 21:56:36

学完C语言和汇编,发现有2个急待解决的问题。

汇编有没单片机那样的定时器中断,比如计算晶振精确定时。C语言教程里没讲中断,但万能的C语言应该有中断,如果有如何使用呢?
这两个问题自感觉很关键。谁可帮我解决。请讲的详细些,谢谢。

wqlovt 发表于 2012-1-2 21:56:37

在DOS下用到定时功能一般有2种,一是空循环来实现二是截获时钟中断计算机的硬件时钟会中断以每55ms一次的频率触发8号中断   

霸气外露 发表于 2012-1-3 02:21:11

难,我是无法回答,虽然我做过学校单片机的中断实验。可惜我不会,哎,帮不上忙了。:loveliness:

wqlovt 发表于 2012-1-3 12:33:59

首先,你说的几点都是没搞清楚方向。
汇编有很多种,在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语言的话设定相应的状态寄存器

nbceshi 发表于 2012-1-3 14:07:23

单片机用寄存器来记录机器周期我知道了,我想知道的是PC机上的X86汇编有没这种精确定时功能,比如要做个游戏,总不能用无用指令来浪费时间吧,那样CPU超下频就不准了。还有就是如果用C语言写个DOS游戏,要时刻准备接受操作的响应,但我现在学完了零基础C语言,发现C的指令是一条条执行下去的,书上没讲该如何响应输入设备。有无C语言使用中断的方法。该不会是写好代码安装中断例程吧,C能很好的响应吗?

wqlovt 发表于 2012-1-5 09:24:46

在PC上用到的基本是 API函数的调用。有些函数里面已经做好了中断的封装

wqlovt 发表于 2012-1-6 11:44:13

API中的SetTimer函数

seuer126 发表于 2012-1-6 15:45:13

单片机应该是电子信息工程专业的学的吧。

nbceshi 发表于 2012-1-6 19:44:38

wqlovt 发表于 2012-1-2 21:56 static/image/common/back.gif
在DOS下用到定时功能一般有2种,一是空循环来实现二是截获时钟中断计算机的硬件时钟会中断以每55ms一次 ...

我百度过,没找着答案,你肯定费心了,谢谢。

事事如意 发表于 2012-1-19 21:34:39

都有中断,高级语言只是把一些中断给封装了。

事事如意 发表于 2012-1-19 21:38:21

另外,在Windows系统里,这些中断是受保护的,你不可能任意的去调用中断,如果可以去任意的去调用中断的话,那就跟以前的dos时代没什么两样,一些不法分子可以轻易而举的利用这些中断进行胡作非为。
这方面的知道,你需要先学会汇编,然后你再学习win32时,就能真相大白了,有些东西,在你没有学到之前,跟你是讲不清楚的。
这些中断在Windows系统下,是受保护的,即所为的“保护机制”。好好学,你会明白的。

事事如意 发表于 2012-1-19 21:39:40

C语言和汇编你都学了,单单就没学习win32,我想的我答案已经够清楚了,也够详细了。谢谢你将来的鱼币。哈哈~~

nichkhun 发表于 2012-1-22 18:43:51

   高科技,我刚好也不会,受教了啊~~~
页: [1]
查看完整版本: 学完C语言和汇编,发现有2个急待解决的问题。