外部时钟输入----------你的问题有可能出现在这里,<br /><br />试一试用内部晶振或者4M~16M选项。<br /><br /> <br /><br /> <br /><br /> <br /><br /> <br /><br /> <br /><br /> <br /><br />#include "reg935.h"<br />#include <intrins.h> //包括有下面可用函数_nop_,_cror_,_iror_,_lror_,_crol_,_chkfloat_等<br />#include <absacc.h> //包括有下面可用函数CBYTE,DBYTE,XBYTE等<br />#define uchar unsigned char<br />#define uint unsigned int <br /><br />void Delay1ms(unsigned int t); <br />void sendbyte(unsigned char value);<br /><br />void main (void)<br />{<br />unsigned char x = 0;<br /><br />//DIVM = 3 ; //进行6分频和IO配置成双向口方式,即变成标准单片机了<br /><br />P0M1 = 0x00;<br />P0M2 = 0x00;<br /><br />P1M1 = 0x00;<br />P1M2 = 0x00;<br /><br />P2M1 = 0x00;<br />P2M2 = 0x00;<br /><br />P3M1 = 0x00;<br />P3M2 = 0x00; <br /><br /> while (1)<br /> {<br /> // for (x=0; x<15; x++)<br /> // {<br /> // }<br /> }<br />}<br /> <br />/********************************************************************<br />** 函数名称:Delay1ms<br />** 函数功能:LPC900用内部RC,占用TO延时<br />** 入口参数:要延时的时间<br />** 出口参数:无<br />**********************************************************************/<br />/*<br />void Delay1ms(unsigned int t) <br />{ <br /> unsigned char tempTMOD;<br /> tempTMOD =TMOD;<br /> TMOD &=0xF0;<br /> TMOD |=0x01;<br /> do<br /> {<br /> TH0 =0xF1;<br /> TL0 =0x60;<br /> TR0 =1;<br /> while(TF0 == 0);<br /> TF0 =0;<br /> TR0 =0;<br /> }while(--t);<br /> TMOD =tempTMOD;<br />}<br />*/ <br /><br /> <br /><br />/********************************************************************<br />** 函数名称:UartIntIni<br />** 函数功能:UART初始化,打开串行中断,串口要随时处于中断的状态<br /> 用内部晶振,9600,用T1作为波持率发生器<br /> 硬件上要接上TXD,RXD引脚<br />** 入口参数:无<br />** 出口参数:无<br />**********************************************************************/ <br />/*<br />static unsigned char UartGetChar=0;<br />static bit UartIntFlag=0; <br />void UartIntIni (void)<br />{<br /> TMOD&= 0x0F;<br /> TMOD|= 0X20;<br /> TH1 = 0xF4; <br /> TL1 = 0XF4;<br /> TR1 = 1;<br /> SCON = 0X50; <br /> ES = 1;<br /> EA = 1;<br />}<br />void UartInt (void) interrupt 4<br />{<br /> EA = 0;<br /> if (RI == 1)<br /> {<br /> UartGetChar = SBUF;<br /> RI = 0;<br /> UartIntFlag = 1;<br /> }<br /> P00 = ~P00; <br /> EA = 1;<br />}<br />*/<br /><br /><br />/********************************************************************<br />** 函数名称:SendAndGetByte<br />** 函数功能:查询法来实现向串**换数据<br /> 调用这个函数,先向PC送参数value,然后等待PC送数,之后把数据回送到PC表示应答,最后收到的数据作为返回值。<br /> 即如果用串口助手查看当处于等待的时候,光标前的一个数是函数的参数,当点击发送数据的按键后,则再出现一个数,<br /> 这个数一方面表明你刚才发送的数,另一方面,作为函数的返回值加以利用。<br /> ---- 用内部晶振,9600,用T1作为波持率发生器---- <br /> 硬件上要接上TXD,RXD引脚。<br />**********************************************************************/ <br />/*用专用的波特率发生器,使用内部7.3768MHz晶振,9600波特率*/<br />/*<br />#define BRGR1_DAT 0x02<br />#define BRGR0_DAT 0xF0 <br />void sendbyte(unsigned char value)<br />{ P1M1 = 0x00; // 设置P1口为准双向口<br /> P1M2 = 0x00;<br /> <br /> SCON = 0x50; // 设置串口工作模式<br /> BRGCON = 0x00; // 关波特率发生器<br /> BRGR1 = BRGR1_DAT; // 设置波特率值<br /> BRGR0 = BRGR0_DAT; <br /> BRGCON = 0x03; // 起动波特率发生器<br /> <br /> SBUF = value;<br /> while (TI == 0);<br /> TI = 0; <br />} */<br /><br /><br />/*用T1作为波特率发生器,使用内部7.3768MHz晶振,9600波特率*/<br />/*<br />void sendbyte(unsigned char value)<br />{<br /> TMOD = 0X20;<br /> TH1 = 0xF4; <br /> TL1 = 0XF4;<br /> TR1 = 1;<br /> SCON =0X50; <br /><br /> SBUF = value;<br /> while (TI == 0);<br /> TI = 0; <br />} <br />*/ <br />/*<br />unsigned char SendAndGetByte(unsigned char value) <br />{<br /> bit tempTR1;<br /> unsigned char tempTMOD,tempTH1,tempTL1,tempSCON,GetByte;<br /><br /> tempTR1 = TR1;<br /> tempTMOD = TMOD; <br /> tempTH1 = TH1;<br /> tempTL1 = TL1;<br /> tempSCON = SCON; <br /><br /> TMOD = 0X20;<br /> TH1 = 0xF4; <br /> TL1 = 0XF4;<br /> TR1 = 1;<br /> SCON =0X50; <br /><br /> SBUF = value;<br /> while (TI == 0);<br /> TI = 0;<br /> while (RI == 0);<br /> RI = 0;<br /> GetByte = SBUF;<br /> SBUF = GetByte;<br /> while (TI == 0);<br /> TI = 0; <br /><br /> TR1 = 0;<br /><br /> TR1 = tempTR1;<br /> TMOD = tempTMOD;<br /> TH1 = tempTH1;<br /> TL1 = tempTL1;<br /> SCON = tempSCON; <br /> TR1 = tempTR1; <br /><br /> return GetByte;<br />} <br />*/<br /><br />/*<br />提供一些常用的语句<br />LED3A_B(LED_yellow);<br />Delay1ms(500);<br />LED3A_B(LED_off);<br />Delay1ms(500); <br /><br />bit myflag = 0;<br />if( myflag == 0)<br />{<br />LED3A_B(LED_yellow); <br />}<br />else<br />{<br />LED3A_B(LED_off); <br />}<br />myflag = ~myflag;<br />*/<br />/*<br />//value 为0灭,为1点红灯,为2点绿灯,为3点橙灯。<br />//双色二极管,P0.6,P0.7,推挽,01,高电平亮,要接上LED3A和LED3B <br />void LED3A_B (unsigned char value) <br />{<br /> #define LED_off 0<br /> #define LED_red 1<br /> #define LED_green 2<br /> #define LED_yellow 3 <br /><br /> P0M1 &=0x3f; //双推挽方式去点亮双色二极管 <br /> P0M2 |=0xC0; <br /> switch (value)<br /> {<br /> case 0: P0 &= 0x3F; break; <br /> case 1: P0 &= 0x3F; P0 |= 0x40; break; <br /> case 2: P0 &= 0x3F; P0 |= 0x80; break; <br /> case 3: P0 |= 0xC0; break; <br /> default: break; <br /> }<br />}<br />*/ <br /><br />
|