打印
[ZLG-MCU]

第一次使用p89lpc936,有一些问题想请教大家

[复制链接]
1972|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jakezlc|  楼主 | 2009-5-20 13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一次使用936单片机,买了一个icp编程工具。写了一个测试程序,如下

#include<stdio.h> 
#include<reg932.h> 
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit WDI     = P2^0;   //看门狗
sbit SIKZ    = P0^5;   //通道选择
void delay(uint t);
main()
{
 P0M1   = 0;
  P0M2   = 0;
 P1M1   = 0x0c;
  P1M2   = 0x0c;
  P2M1   = 0;
  P2M2   = 0;
  P3M1   = 0;
  P3M2   = 0;

 SIKZ=1;     //P05
  while(1)
  {
   delay(100);
   WDI=~WDI;  /*P20产生方波*/
   SS=~SS;   /*P24产生方波*/
  }
}
/* 延时t毫秒 */
void delay(uint t)
{
 uint i;
 while(t--)
 {
  /* 对于12M时钟,约延时1ms */
  for (i=0;i<750;i++)
  {}
 }
}

 

写进去后单片机不工作。想问一下,936使用的时候,程序这样写可以吗,还需要加什么特别的东西吗?

写的时候配置的外部复位和外部时钟输入,状态位为0;但写进去后单片机不工作?

相关帖子

沙发
liqindz| | 2009-5-20 13:23 | 只看该作者

RE

外部时钟输入----------你的问题有可能出现在这里,

试一试用内部晶振或者4M~16M选项。

 

 

 

 

 

 

#include "reg935.h"
#include <intrins.h> //包括有下面可用函数_nop_,_cror_,_iror_,_lror_,_crol_,_chkfloat_等
#include <absacc.h>  //包括有下面可用函数CBYTE,DBYTE,XBYTE等
#define uchar unsigned char
#define uint unsigned int  

void Delay1ms(unsigned int t); 
void sendbyte(unsigned char value);

void main (void)
{
unsigned char x = 0;

//DIVM = 3 ;   //进行6分频和IO配置成双向口方式,即变成标准单片机了

P0M1 = 0x00;
P0M2 = 0x00;

P1M1 = 0x00;
P1M2 = 0x00;

P2M1 = 0x00;
P2M2 = 0x00;

P3M1 = 0x00;
P3M2 = 0x00;  

  while (1)
  {
 // for (x=0; x<15; x++)
 // {
 // }
  }
}
  
/********************************************************************
** 函数名称:Delay1ms
** 函数功能:LPC900用内部RC,占用TO延时
** 入口参数:要延时的时间
** 出口参数:无
**********************************************************************/
/*
void Delay1ms(unsigned int t)  

 unsigned char tempTMOD;
 tempTMOD        =TMOD;
 TMOD           &=0xF0;
 TMOD           |=0x01;
 do
 {
  TH0         =0xF1;
  TL0         =0x60;
  TR0         =1;
  while(TF0 == 0);
  TF0         =0;
  TR0         =0;
 }while(--t);
 TMOD            =tempTMOD;
}
*/  

 

/********************************************************************
** 函数名称:UartIntIni
** 函数功能:UART初始化,打开串行中断,串口要随时处于中断的状态
    用内部晶振,9600,用T1作为波持率发生器
    硬件上要接上TXD,RXD引脚
** 入口参数:无
** 出口参数:无
**********************************************************************/ 
/*
static unsigned char  UartGetChar=0;
static bit UartIntFlag=0; 
void UartIntIni (void)
{
 TMOD&= 0x0F;
 TMOD|= 0X20;
 TH1  = 0xF4; 
 TL1  = 0XF4;
    TR1  = 1;
 SCON = 0X50; 
 ES   = 1;
 EA   = 1;
}
void UartInt (void) interrupt 4
{
 EA = 0;
 if (RI == 1)
 {
  UartGetChar = SBUF;
  RI = 0;
  UartIntFlag = 1;
 }
 P00  =  ~P00; 
 EA = 1;
}
*/


/********************************************************************
** 函数名称:SendAndGetByte
** 函数功能:查询法来实现向串**换数据
    调用这个函数,先向PC送参数value,然后等待PC送数,之后把数据回送到PC表示应答,最后收到的数据作为返回值。
    即如果用串口助手查看当处于等待的时候,光标前的一个数是函数的参数,当点击发送数据的按键后,则再出现一个数,
    这个数一方面表明你刚才发送的数,另一方面,作为函数的返回值加以利用。
  ---- 用内部晶振,9600,用T1作为波持率发生器---- 
    硬件上要接上TXD,RXD引脚。
**********************************************************************/ 
/*用专用的波特率发生器,使用内部7.3768MHz晶振,9600波特率*/
/*
#define  BRGR1_DAT 0x02
#define  BRGR0_DAT 0xF0  
void sendbyte(unsigned char value)
{   P1M1 = 0x00;    // 设置P1口为准双向口
 P1M2 = 0x00;
    
 SCON = 0x50;    // 设置串口工作模式
 BRGCON = 0x00;   // 关波特率发生器
 BRGR1 = BRGR1_DAT;   // 设置波特率值
 BRGR0 = BRGR0_DAT;  
 BRGCON = 0x03;   // 起动波特率发生器
 
 SBUF  = value;
 while (TI == 0);
 TI    =  0;   
} */


/*用T1作为波特率发生器,使用内部7.3768MHz晶振,9600波特率*/
/*
void sendbyte(unsigned char value)
{
 TMOD = 0X20;
 TH1  = 0xF4; 
 TL1  = 0XF4;
    TR1  = 1;
 SCON =0X50; 

 SBUF  = value;
 while (TI == 0);
 TI    =  0;    

*/   
/*
unsigned char SendAndGetByte(unsigned char value) 
{
 bit tempTR1;
 unsigned char tempTMOD,tempTH1,tempTL1,tempSCON,GetByte;

 tempTR1  = TR1;
 tempTMOD = TMOD; 
 tempTH1  = TH1;
 tempTL1  = TL1;
 tempSCON = SCON;   

 TMOD = 0X20;
 TH1  = 0xF4; 
 TL1  = 0XF4;
    TR1  = 1;
 SCON =0X50; 

 SBUF  = value;
 while (TI == 0);
 TI    =  0;
 while (RI == 0);
 RI    = 0;
 GetByte  = SBUF;
 SBUF  = GetByte;
 while (TI == 0);
 TI    =  0;  

 TR1 = 0;

 TR1  = tempTR1;
 TMOD = tempTMOD;
 TH1  = tempTH1;
 TL1  = tempTL1;
 SCON = tempSCON;  
 TR1 = tempTR1; 

 return GetByte;

*/

/*
提供一些常用的语句
LED3A_B(LED_yellow);
Delay1ms(500);
LED3A_B(LED_off);
Delay1ms(500); 

bit myflag = 0;
if( myflag == 0)
{
LED3A_B(LED_yellow); 
}
else
{
LED3A_B(LED_off); 
}
myflag = ~myflag;
*/
/*
//value 为0灭,为1点红灯,为2点绿灯,为3点橙灯。
//双色二极管,P0.6,P0.7,推挽,01,高电平亮,要接上LED3A和LED3B 
void LED3A_B (unsigned char value)  
{
    #define LED_off    0
 #define LED_red    1
    #define LED_green  2
    #define LED_yellow 3  

 P0M1 &=0x3f;        //双推挽方式去点亮双色二极管  
 P0M2 |=0xC0; 
 switch (value)
 {
  case 0:    P0  &= 0x3F; break; 
  case 1:  P0  &= 0x3F; P0  |= 0x40; break;  
  case 2:     P0  &= 0x3F; P0  |= 0x80; break; 
     case 3:     P0  |= 0xC0; break; 
  default:    break;  
 }
}
*/  

使用特权

评论回复
板凳
jakecumt| | 2009-5-20 16:41 | 只看该作者

路过 学习

使用特权

评论回复
地板
dxf40943596| | 2009-11-6 08:49 | 只看该作者
如果你没有加外部的复位电路那么应该选择上电复位

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

49

帖子

0

粉丝