#include <atmelAT89X52.H><br />#include <stdio.h><br /><br />#define T0_LOW 0x3A<br />#define T0_HIGH 0xFE<br /><br />idata led_coder[10] = {0xbf,0x8c,0xdb,0xde,0xec,0xf6,0xf7,0x9c,0xff,0xfe};<br />unsigned char led_bit = 0;<br /><br />void led_disp(void)<br />{<br /> switch(led_bit)<br /> {<br /> case 0:<br /> P2 = 0xff;<br /> P1 = led_coder[0];<br /> P1_7 = 0;<br /> P2 = 0xff;<br /> P1_7 = 1;<br /> P2 = 0x0;<br /><br /> break;<br /> case 1:<br /> P2 = 0xff;<br /> P1 = led_coder[1];<br /> P1_7 = 0;<br /> P2 = 0xff;<br /> P1_7 = 1;<br /> P2 = 0x1;<br /> break;<br /> case 2:<br /> P2 = 0xff;<br /> P1 = led_coder[2];<br /> P1_7 = 0;<br /> P2 = 0xff;<br /> P1_7 = 1;<br /> P2 = 0x2;<br /> break;<br /> case 3:<br /> P2 = 0xff;<br /> P1 = led_coder[3];<br /> P1_7 = 0;<br /> P2 = 0xff;<br /> P1_7 = 1;<br /> P2 = 0x3;<br /> break;<br /> case 4:<br /> P2 = 0xff;<br /> P1 = led_coder[4];<br /> P1_7 = 0;<br /> P2 = 0xff;<br /> P1_7 = 1;<br /> P2 = 0x4;<br /> break;<br /> case 5:<br /> P2 = 0xff;<br /> P1 = led_coder[5];<br /> P1_7 = 0;<br /> P2 = 0xff;<br /> P1_7 = 1;<br /> P2 = 0x5;<br /> break;<br /> case 6:<br /> P2 = 0xff;<br /> P1 = led_coder[6];<br /> P1_7 = 0;<br /> P2 = 0xff;<br /> P1_7 = 1;<br /> P2 = 0x6;<br /> break;<br /> case 7:<br /> P2 = 0xff;<br /> P1 = led_coder[7];<br /> P1_7 = 0;<br /> P2 = 0xff;<br /> P1_7 = 1;<br /> P2 = 0x7;<br /> break;<br /> case 8:<br /> P2 = 0xff;<br /> P1 = led_coder[8];<br /> P1_7 = 0;<br /> P2 = 0xff;<br /> P1_7 = 1;<br /> P2 = 0x8;<br /> break;<br /> case 9:<br /> P2 = 0xff;<br /> P1 = led_coder[9];<br /> P1_7 = 0;<br /> P2 = 0xff;<br /> P1_7 = 1;<br /> P2 = 0x9;<br /> break;<br /> default:<br /> break;<br /><br /> }<br /> if(led_bit == 9)<br /> led_bit = 0;<br /> else<br /> led_bit++;<br />}<br /><br />void ISRTimer0() interrupt 1<br />{<br /> TL0 = T0_LOW;<br /> TH0 = T0_HIGH;<br /> led_disp();<br /> <br />}<br /><br />void InitCPU(void)<br />{<br /> IP = 0x0;//-- PS1 PT2 PS0 PT1 PX1 PT0 PX0<br />//PT2 定时器2 中断优先级<br />//PS 串行通信中断优先级<br />//PT1 定时器1 中断优先级<br />//PX1 外部中断1 优先级<br />//PT0 定时器0 中断优先级<br />//PX0 外部中断0 优先级<br /> // 中断优先级为外部中断0最高,其次外部中断1,其次定时器0,串口中断<br /> IE = 0x82; //0 外部中断0 1 定时器0 溢出 2 外部中断1 3 定时器1 溢出 4 串行口中断 5 定时器2 溢出 <br /> // EA=0,中断关闭 EA ES1 ET2 ES ET1 EX1 ET0 EX0<br /> // ET1=0,允许定时中断1<br /> // EX0=1,允许外中断0<br /> // EX1=0,不允许外中断1<br /> // ET0=1,允许定时中断0<br /> // ES=1,允许串口中断<br /> TMOD = 0x10; // 定时器0,采用方式1,16位计数<br /> // GATE=0,由TR0控制<br /> // C/T=0,做为定时器<br /> // (M1,M0)=01,16位定时器<br /> // 定时器1,采用方式1,16位计数<br /> // GATE=0,由TR1控制<br /> // C/T=0,做为定时器<br /> // (M1,M0)=10,8位自动重载定时器<br /> //T0用来做延时,T1用来产生串口通信的波特率。<br /> TL0 = T0_LOW;<br /> TH0 = T0_HIGH; <br /> TR0 = 1;<br />}<br /><br />void main(void)<br />{<br /> InitCPU();<br /> while(1)<br /> {<br /> ;<br /> }<br /> <br />}<br />我用汇编编写了一段调试程序,已经达到效果,然后我再kile c的环境下编写这段c程序,仿真我都觉得通过了,烧录上去没有任何反应,我查看生成的汇编代码,发现程序代码是从0x4190处开始执行的(定时器0的代码)我很奇怪为什么会这样,朋友们帮我分析下 |
|