一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 4030|回复: 11
收起左侧

求助这几句汇编转为C语言

[复制链接]
发表于 2010-11-24 19:00 | 显示全部楼层 |阅读模式
各位高手如下这几句汇编怎样转为C语言?谢谢!
MOV   A,#0B7H       ;中断响应时间同步修正
ADD   A,TL0         ;低8位初值修正
MOV   TL0,A         ;重装初值(低8位修正值)
MOV   A,#3CH        ;高8位初值修正
ADDC  A,TH0         ;
MOV   TH0,A         ;重装初值(高8位修正值)
发表于 2010-11-24 19:14 | 显示全部楼层
CY = 0;
TL0 += 0xb7;
TH0 += 0x3c + CY;
 楼主| 发表于 2010-11-24 19:21 | 显示全部楼层
TL0=((65536-50000)%256)+TL0; //重装计数初值+同步修正值
//TH0=(65536-50000)/256; //对TH0 TL0赋值
TH0 += ((65536-50000)/256)+CY;
tcnt++;        //每过50ms tcnt加 1
这句能通过TL0=((65536-50000)%256)+TL0; //重装计数初值+同步修正值
这句就KEIL不通过TH0 += ((65536-50000)/256)+CY;
 楼主| 发表于 2010-11-24 19:26 | 显示全部楼层
本帖最后由 LBQ691477940 于 2010-11-24 19:32 编辑
CY = 0;
TL0 += 0xb7;
TH0 += 0x3c + CY;
bluefeel 发表于 2010-11-24 19:14 https://www.yleee.com.cn/images/common/back.gif



请问: TL0 +=0XB7;如果TL0超出会不会影响CY呢?如果不会那TH0 +=0X3C+CY这句就没意义了,跟上面的汇编效果就完全不一样了
TH0 +=0X3C+CY好像C语言不支持直接字节与一位相加哟
 楼主| 发表于 2010-11-24 22:48 | 显示全部楼层
发表于 2010-11-25 08:30 | 显示全部楼层
LBQ691477940 发表于 2010-11-24 22:48 https://www.yleee.com.cn/images/common/back.gif



    隐性的类型转换
 楼主| 发表于 2010-11-25 12:27 | 显示全部楼层
本帖最后由 LBQ691477940 于 2010-11-25 13:01 编辑
隐性的类型转换
bluefeel 发表于 2010-11-25 08:30 https://www.yleee.com.cn/images/common/back.gif


以下是定时器部分中断函数
void t0(void) interrupt 1 using 0                    //原C语句
       {
                          PUSH     ACC(0xE0)              //KEIL的隐藏反汇编
                          PUSH     PSW(0xD0)             //KEIL的隐藏反汇编
                         TL0=(65536-50000)%256+TL0; //原C语句
                          MOV      A,TL0(0x8A)           //KEIL的隐藏反汇编
                          ADD      A,#P3(0xB0)          //KEIL的隐藏反汇编??认成P3了哈哈
                          MOV      TL0(0x8A),A          //KEIL的隐藏反汇编

                         TH0=(65536-50000)/256;          //原C语句
                         MOV      TH0(0x8C),#0x3C   //KEIL的隐藏反汇编

从上面的隐性的类型转换看来
MOV   A,#0B7H       ;中断响应时间同步修正
ADD   A,TL0         ;低8位初值修正
MOV   TL0,A         ;重装初值(低8位修正值)
是可以用:TL0 +=0XB7;代替
问题就是如果进行TL0 +=0XB7;运算后CY位怎样加到TH0中
TH0 += 0x3C+CY;但KEIL是不认这语法的。
麻烦大侠赐教谢谢!
发表于 2010-11-25 13:11 | 显示全部楼层
以下是定时器部分中断函数
void t0(void) interrupt 1 using 0                    //原C语句
      ...
LBQ691477940 发表于 2010-11-25 12:27 https://www.yleee.com.cn/images/common/back.gif



TH0 += 0x3C+(unsigned char)CY;
这样可以了,我试过
 楼主| 发表于 2010-11-25 13:20 | 显示全部楼层
谢谢能通过了
变成如下这样了,还没时间看反汇编结果是否一样
   215: void t0(void) interrupt 1 using 0
   216:         {
C:0x01E0    C0E0     PUSH     ACC(0xE0)
C:0x01E2    C0D0     PUSH     PSW(0xD0)
   217:                 TL0=(65536-50000)%256+TL0;
   218:                 //TH0=(65536-50000)/256;
C:0x01E4    E58A     MOV      A,TL0(0x8A)
C:0x01E6    24B0     ADD      A,#P3(0xB0)
C:0x01E8    F58A     MOV      TL0(0x8A),A
   219:                 TH0 += ((65536-50000)%256)+(unsigned char)CY;
C:0x01EA    E4       CLR      A
C:0x01EB    33       RLC      A
C:0x01EC    24B0     ADD      A,#P3(0xB0)
C:0x01EE    258C     ADD      A,TH0(0x8C)
C:0x01F0    F58C     MOV      TH0(0x8C),A
   220:                 tcnt++;   
   221: //?????????????????????????????????????????????
发表于 2010-11-25 13:42 | 显示全部楼层
uint  t0dat;
t0dat=t0dat+0x3cb7;
TL0=t0dat;
TH0=t0dat>>8;

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-9 23:37 , Processed in 0.065948 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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