[ZLG-MCU] 第一次使用p89lpc936,有一些问题想请教大家

[复制链接]
 楼主| jakezlc 发表于 2009-5-20 13:19 | 显示全部楼层 |阅读模式
第一次使用936单片机,买了一个icp编程工具。写了一个测试程序,如下<br /><br />#include&ltstdio.h&gt&nbsp;<br />#include&ltreg932.h&gt&nbsp;<br />#include&ltintrins.h&gt<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />#define&nbsp;uint&nbsp;unsigned&nbsp;int<br />sbit&nbsp;WDI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;P2^0;&nbsp;&nbsp;&nbsp;//看门狗<br />sbit&nbsp;SIKZ&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;P0^5;&nbsp;&nbsp;&nbsp;//通道选择<br />void&nbsp;delay(uint&nbsp;t);<br />main()<br />{<br />&nbsp;P0M1&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;P0M2&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;P1M1&nbsp;&nbsp;&nbsp;=&nbsp;0x0c;<br />&nbsp;&nbsp;P1M2&nbsp;&nbsp;&nbsp;=&nbsp;0x0c;<br />&nbsp;&nbsp;P2M1&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;P2M2&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;P3M1&nbsp;&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;P3M2&nbsp;&nbsp;&nbsp;=&nbsp;0;<br /><br />&nbsp;SIKZ=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P05<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;WDI=~WDI;&nbsp;&nbsp;/*P20产生方波*/<br />&nbsp;&nbsp;&nbsp;SS=~SS;&nbsp;&nbsp;&nbsp;/*P24产生方波*/<br />&nbsp;&nbsp;}<br />}<br />/*&nbsp;延时t毫秒&nbsp;*/<br />void&nbsp;delay(uint&nbsp;t)<br />{<br />&nbsp;uint&nbsp;i;<br />&nbsp;while(t--)<br />&nbsp;{<br />&nbsp;&nbsp;/*&nbsp;对于12M时钟,约延时1ms&nbsp;*/<br />&nbsp;&nbsp;for&nbsp;(i=0;i&lt750;i++)<br />&nbsp;&nbsp;{}<br />&nbsp;}<br />}<br /><br />&nbsp;<br /><br />写进去后单片机不工作。想问一下,936使用的时候,程序这样写可以吗,还需要加什么特别的东西吗?<br /><br />写的时候配置的外部复位和外部时钟输入,状态位为0;但写进去后单片机不工作?<br />
liqindz 发表于 2009-5-20 13:23 | 显示全部楼层

RE

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

路过 学习

  
dxf40943596 发表于 2009-11-6 08:49 | 显示全部楼层
如果你没有加外部的复位电路那么应该选择上电复位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

49

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

14

主题

49

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部