有几个问题麻烦大家了,c转汇编

pang123hui 2009-12-28 12:55:19
中午我大二学姐给了我几题她们老师布置点题目,希望我帮忙做一下,是单片机点题目,也就是给电路图和C语言代码,要求把C语言代码改成汇编码,因为明天就要交,我也不敢保证今晚我就可以弄出来(本人大一,自学了单片机,底子不牢固啊)

直接来了句:“明天交不了,单片机就挂科了。” 搞得我都没话说了

所以把题目发出来,大家有会点看看能不能帮个忙,先行谢过啦


其实我看了下,都是一本书上的题,叫《单片机C语言程序设计实训100例——基于8051+Proteus仿真》,这本书好像还挺有名的

第一题:是关于 INT0及INT1中断计数 的题目





#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit k3 = P3^4;
sbit k4 = P3^5;

uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff
};

uchar code Scan_BITs[]=
{
0x20,0x10,0x08,0x04,0x02,0x01
};

uchar data Buffer_Counts[]={0,0,0,0,0,0};
uint Count_A=0;
uint Count_B=0;

void DelayMS(uint x)
{
uchar t;
while(x--)
{
for(t=0;t<120;t++);
}
}

void Show_Counts()
{
uint i;
Buffer_Counts[2] = Count_A / 100;
Buffer_Counts[1] = Count_A % 100 /10;
Buffer_Counts[0] = Count_A % 10;
if(Buffer_Counts[2]==0)
{
Buffer_Counts[2] = 0x0a;
if(Buffer_Counts[1]==0)
{
Buffer_Counts[1]=0x0a;
}
}

Buffer_Counts[5] = Count_B / 100;
Buffer_Counts[4] = Count_B % 100 /10;
Buffer_Counts[3] = Count_B % 10;
if(Buffer_Counts[5]==0)
{
Buffer_Counts[5] = 0x0a;
if(Buffer_Counts[4]==0)
{
Buffer_Counts[4]=0x0a;
}
}
for(i=0;i<6;i++)
{
P2 = Scan_BITs[i];
P1 = DSY_CODE[Buffer_Counts[i]];
DelayMS(1);
}
}

void main()
{
IT0 = 1;
IT1 = 1;
PX0 = 1;
IE = 0x85;
while(1)
{
if(k3 == 0) Count_A = 0;
if(k4 == 0) Count_B = 0;
Show_Counts();
}
}

void EX_INT0() interrupt 0
{
Count_A++;
}

void EX_INT1() interrupt 2
{
Count_B++;
}



第二题:是关于按键看门狗的



/*************** writer:shopping.w ******************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sfr WDRST = 0xA6;
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit K1 = P1^4;

void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}

void main()
{
LED1 = 0;
LED2 = 1;
DelayMS(2000);
TMOD = 0x01;
TH0 = -16000/256;
TL0 = -16000%256;
IE = 0x82;
WDRST = 0x1E;
WDRST = 0xE1;
while(1)
{
if(K1==0)
{
TR0 = 0;
LED1 = 1;
LED2 = ~LED2;
DelayMS(200);
}
}
}

void Timer0() interrupt 1
{
TH0 = -16000/256;
TL0 = -16000%256;
WDRST = 0x1E;
WDRST = 0xE1;
}


第三题:是关于74HC595串入并出芯片应用


/*************** writer:shopping.w ******************/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit SH_CP = P2^0;
sbit DS = P2^1;
sbit ST_CP = P2^2;
uchar temp;
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};

void Delay(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}

void In_595()
{
uchar i;
for(i=0;i<8;i++)
{
temp <<= 1;
DS = CY;
SH_CP = 1;
_nop_();
_nop_();
SH_CP = 0;
}
}

void Out_595()
{
ST_CP = 0;
_nop_();
ST_CP = 1;
_nop_();
ST_CP = 0;
}

void main()
{
uchar i;
while(1)
{
for(i=0;i<10;i++)
{
temp = DSY_CODE[i];
In_595();
Out_595();
Delay(200);
}
}
}
...全文
122 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pang123hui 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xianzq888 的回复:]
呃。。。你用VC调式的时候那个汇编算不?
[/Quote]

那个肯定不算......
wxq4100798 2009-12-28
  • 打赏
  • 举报
回复
日后再说
guzhijie1981 2009-12-28
  • 打赏
  • 举报
回复
泡学姐?
  • 打赏
  • 举报
回复
呃。。。你用VC调式的时候那个汇编算不?
苍蝇①号 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pang123hui 的回复:]
引用 1 楼 jamesf1982 的回复:
看来你比你学姐牛


......在大一还算有一点点名气吧
[/Quote]
牛人
俺不完单片机帮不上忙
pang123hui 2009-12-28
  • 打赏
  • 举报
回复
顶一下
pang123hui 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jamesf1982 的回复:]
看来你比你学姐牛
[/Quote]

......在大一还算有一点点名气吧
james_hw 2009-12-28
  • 打赏
  • 举报
回复
看来你比你学姐牛

69,371

社区成员

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

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