散100!有谁能帮我写成C?

虾猫先生 2003-12-31 09:27:25
以下有一个汇编写成的有关看门狗的例子,有哪位大侠可以写成C?急用!谢谢!
1、解锁寄存器
2、设置INDEX 37H 的位 6 为"0"禁止看门狗定时器
3、设置INDEX 3BH,3AH,39H 为预期的定时计数值
4、设置INDEX 38H 位 7-4 选择超时所触发的事件
5、设置INDEX 37H 的位 6 为"1"使能看门狗定时器
6、锁定寄存器
设定定时值128秒,超时事件为系统复位System RESET
dosseg
.model small
.stack 100h
.code

main proc
mov ax 0c513h;Unlock config.register
call writechip
mov ax 03737h;Disable watchdog timer
call readchip
and al,10111111b
xchg ah,al
call writechip
mov ax,0403bh;Set the expected counter value
call writechip;to [400000h]
mov ax,0003ah;30.5*sec*400000h=128sec
call writechip
mov ax,00039h
call writechip
mov ax,03838h;Select"system reset"as timeout action
call readchip
and al,00001111b
or al,11010000b
xchg ah,al
call writechip
mov ax,03737h;Wnable watchdog timer
call readchip
or al,01000000b
xchg ah,al
call writechip
mov ax,00013h;Lock config.register
call writechip
mov ax,04c00h
int 21h
main endp
readchip proc
out 22h,al
nop
nop
in al,23h
nop
nop
ret
readchip endp

writechip proc
out 22h,al
nop
nop
xchg ah,al
out 23h,al
nop
nop
xchg ah,al
ret
writechip endp

end main
...全文
39 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuxw 2004-01-08
  • 打赏
  • 举报
回复
这个要根据你用的单片机型号来确定,你用的是什么型号?
tuxw 2004-01-08
  • 打赏
  • 举报
回复
你这个应该是单板机吧,“将可执行文件写入单片机”是什么意思?写入单片机的一般应该是HEX或BIN等二进制文件,而不是可执行文件。你是写入另外一块单片机还是写入你说的这块主板?
outport与inport是否能用,要看你的编译器是否带有支持你的硬件的相应的库,如果没有,硬件的指令系统应该会提供读写端口的指令,你根据它提供的指令自己写出这个两函数,或将上面的代码中用到这个两函数的地方用相应的指令代替,我没用过这块板,对其也不了解,你自己查一下它自带的说明书
你前面提到的BIOS设置功能,是可以通过它来设定的,通过程序设定的好处时你可以随时更改设置。
至于如何喂狗,实际上就是破坏狗复位的条件。比如狗的特性是1秒内数据端口没有任何读写就认为程序跑飞了就会复位,则你可以没事就去随便读一下狗,不让它空闲达到1秒它就不会复位,或者它会在使能信号保持1秒不变就复位,你就可以给使能信号一个脉冲。所以,你要查说明书看看你的狗在什么情况下会复位,然后才能决定如何喂狗
99 2004-01-08
  • 打赏
  • 举报
回复
就是
jawibn 2004-01-08
  • 打赏
  • 举报
回复
c 要用到库, 要在单片机运行,何苦不用汇编呢:-)
虾猫先生 2004-01-08
  • 打赏
  • 举报
回复
醉兄,你好,我用的是EC3-1371CLDN主板,不知道是否支持outportb和inportb函数,我做了一下试验,功能并没有实施,编译没问题可以通过,但把编译好的可执行文件写入单片机就不行了,估计是不支持吧?那要如何是好?是不是还要写出这二个函数,然后调用呢?如果写的话,怎么写?具体的步骤是什么?还望醉兄详细赐教!感谢!毫无疑问,这分是你一个人的了,如果不够还加。
celerityok 2004-01-07
  • 打赏
  • 举报
回复
up!
虾猫先生 2004-01-07
  • 打赏
  • 举报
回复
谢谢醉书生老兄,还有一问题请教:我的单片机有BIOS设置看门狗定时器的功能,诸如定时周期,复位状态等,请问这个设置跟上面的程序是一样的道理吗?如果是一样的话,可不可以不把这些东东写进去,而直接设置BIOS?设置BIOS后又如何在程序里写一个喂狗的程序,使之可以在死机情况下引导机器复位?我的单片机看门狗定时器I/O地址为120H-123H,还望醉书生老兄赐教,多谢!十分感谢!
PrayerLee 2004-01-07
  • 打赏
  • 举报
回复
汇编学的太差,无能为力,只能帮你顶.
liushuaiboy 2003-12-31
  • 打赏
  • 举报
回复
up
tuxw 2003-12-31
  • 打赏
  • 举报
回复
有个 readchip 和 writechip 后
应该将
解锁、锁定定时器
禁止、允许看门狗
设定计数器值
封装成函数,以后使用就不必须记住看门狗芯片的用法了,这样就不必须跟那些
神奇的 c513 37 38 3a 3b 之类的功能号打交道了
tuxw 2003-12-31
  • 打赏
  • 举报
回复
如果你是在单片机系统中,可能没有 outportb 和 inportb 函数, 但系统会支持向某地址写数据的方法的大概类似于

#define XBYTE[addr] PORT1
PORT1 = data; // 写
stat = PORT1; // 读

不同的单片机系统会有所不同

tuxw 2003-12-31
  • 打赏
  • 举报
回复
不知道你的看门狗是啥芯片,下面的函数只是根据上面的代码翻译来的,你试试看能用不


// 读狗
unsigned char readchip( unsigned char port )
{
unsigned char ret;

outportb( 0x22, port );
port = port;
port = port; // 延时,如果延时不够,可以再加几句

ret = inportb( 0x23 );
port = port;
port = port; // 延时

return ret;
}

// 写狗
void writechip( unsigned char data, unsigned char port )
{
// 22H、23H 是操作看门狗的端口,由硬件系统设计时决定的
outportb( 0x22, port ); // 端口号写入索引寄存器
n = n;
n = n; // 延时
outportb( 0x23, data ); // 数据写入数据寄存器
n = n;
n = n; // 延时

//_AL = port;
//_AH = data; // 返回时寄器状态,不过写成C后象没什么用处

return n;
}

int main()
{
unsigned char stat;

writechip( 0xc5, 0x13 ); // 解锁看门狗寄存器,使能重新设定
// 0xc5 应该是看门狗的命令字,0x13是功能索引
// 或寄存器号,这由看门狗芯片决定

stat = readchip( 0x37 ); // 读出看门狗定时器状态
stat &= 0xbf; // 第6位置低
writechip( stat, 0x37 ); // 关闭看门狗定时器,以便重置溢出值

// 设定定时器计数值 :0x400000, 由高到低分别写入 3BH,3AH,39H
writechip( 0x04, 0x3b );
writechip( 0x00, 0x3a );
writechip( 0x00, 0x39 );

// 选择组合触发事件
// 可以根据你触发需要和状态标志各位的意义直接组合出状态字
// 然后写入38H端口,这样就不必先读出状态字了
stat = readchip( 0x38 ); // 读出当前触发事件状态
stat &= 0x0f; // 按需要修改
stat |= 0xd0;
writechip( stat, 0x38 ); // 写入新的触发状态

stat = readchip( 0x37 ); // 读出看门狗定时器状态
stat |= 0x40; // 第6位置拉高
writechip( stat, 0x37 ); // 启动看门狗定时器

writechip( 0x00, 0x13 ); // 锁定看门狗寄器, 使不能被修改

return 0;
}
ljfwarrior 2003-12-31
  • 打赏
  • 举报
回复
过几天就要考汇编,但还不熟!!帮不了你了!!
gaoxianfeng 2003-12-31
  • 打赏
  • 举报
回复
gz

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧