鱼C论坛

 找回密码
 立即注册
查看: 3699|回复: 12

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

[复制链接]
发表于 2012-1-2 21:56:36 | 显示全部楼层 |阅读模式
20鱼币
汇编有没单片机那样的定时器中断,比如计算晶振精确定时。C语言教程里没讲中断,但万能的C语言应该有中断,如果有如何使用呢?
这两个问题自感觉很关键。谁可帮我解决。请讲的详细些,谢谢。

最佳答案

查看完整内容

在DOS下用到定时功能一般有2种,一是空循环来实现 二是截获时钟中断 计算机的硬件时钟会中断以每55ms一次的频率触发8号中断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-2 21:56:37 | 显示全部楼层
在DOS下用到定时功能一般有2种,一是空循环来实现  二是截获时钟中断  计算机的硬件时钟会中断以每55ms一次的频率触发8号中断   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-3 02:21:11 | 显示全部楼层
难,我是无法回答,虽然我做过学校单片机的中断实验。可惜我不会,哎,帮不上忙了。:loveliness:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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         ; SINT  NO / 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 上的INT  WIN32把中断封装在函数里了
单片机的中断C语言的话设定相应的状态寄存器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-1-3 14:07:23 | 显示全部楼层
单片机用寄存器来记录机器周期我知道了,我想知道的是PC机上的X86汇编有没这种精确定时功能,比如要做个游戏,总不能用无用指令来浪费时间吧,那样CPU超下频就不准了。还有就是如果用C语言写个DOS游戏,要时刻准备接受操作的响应,但我现在学完了零基础C语言,发现C的指令是一条条执行下去的,书上没讲该如何响应输入设备。有无C语言使用中断的方法。该不会是写好代码安装中断例程吧,C能很好的响应吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-5 09:24:46 | 显示全部楼层
在PC上用到的基本是 API函数的调用。有些函数里面已经做好了中断的封装
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-6 11:44:13 | 显示全部楼层
API中的SetTimer函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-6 15:45:13 | 显示全部楼层
单片机应该是电子信息工程专业的学的吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-1-6 19:44:38 | 显示全部楼层

我百度过,没找着答案,你肯定费心了,谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-19 21:34:39 | 显示全部楼层
都有中断,高级语言只是把一些中断给封装了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-19 21:38:21 | 显示全部楼层
另外,在Windows系统里,这些中断是受保护的,你不可能任意的去调用中断,如果可以去任意的去调用中断的话,那就跟以前的dos时代没什么两样,一些不法分子可以轻易而举的利用这些中断进行胡作非为。
这方面的知道,你需要先学会汇编,然后你再学习win32时,就能真相大白了,有些东西,在你没有学到之前,跟你是讲不清楚的。
这些中断在Windows系统下,是受保护的,即所为的“保护机制”。好好学,你会明白的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-19 21:39:40 | 显示全部楼层
C语言和汇编你都学了,单单就没学习win32,我想的我答案已经够清楚了,也够详细了。谢谢你将来的鱼币。哈哈~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-22 18:43:51 | 显示全部楼层
   高科技,我刚好也不会,受教了啊~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 18:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表