-
楼主要冷静
-
msp430的DS18B20程序。修改下就可以用了
#include
typedef unsigned char uchar;
typedef unsigned int uint;
#define DQ1 P1OUT |= BIT6
#define DQ0 P1OUT &= ~BIT6
#define DQ_in P1DIR &= ~BIT6
#define DQ_out P1DIR |= BIT6
#define DQ_val (P1IN & BIT6)
/*******************************************
函数名称:DelayNus
功 能:实现N个微秒的延时
参 数:n--延时长度
返回值 :无
说明 :定时器A的计数时钟是1MHz,CPU主频8MHz
所以通过定时器延时能够得到极为精确的
us级延时
********************************************/
void DelayNus(uint n)
{
CCR0 = n;
TACTL |= MC_1; //增计数到CCR0
while(!(TACTL & BIT0)); //等待
TACTL &= ~MC_1; //停止计数
TACTL &= ~BIT0; //清除中断标志
}
/*******************************************
函数名称:Init_18B20
功 能:对DS18B20进行复位操作
参 数:无
返回值 :初始化状态标志:1--失败,0--成功
********************************************/
uchar Init_18B20(void)
{
uchar Error;
DQ_out;
_DINT();
DQ0;
DelayNus(500);
DQ1;
DelayNus(55);
DQ_in;
_NOP();
if(DQ_val)
{
Error = 1; //初始化失败
}
else
{
Error = 0; //初始化成功
}
DQ_out;
DQ1;
_EINT();
DelayNus(400);
return Error;
}
/*******************************************
函数名称:Write_18B20
功 能:向DS18B20写入一个字节的数据
参 数:wdata--写入的数据
返回值 :无
********************************************/
void Write_18B20(uchar wdata)
{
uchar i;
_DINT();
for(i = 0; i < 8;i++)
{
DQ0;
DelayNus(6); //延时6us
if(wdata & 0X01) DQ1;
else DQ0;
wdata >>= 1;
DelayNus(50); //延时50us
DQ1;
DelayNus(10); //延时10us
}
_EINT();
}
/*******************************************
函数名称:Read_18B20
功 能:从DS18B20读取一个字节的数据
参 数:无
返回值 :读出的一个字节数据
********************************************/
uchar Read_18B20(void)
{
uchar i;
uchar temp = 0;
_DINT();
for(i = 0;i < 8;i++)
{
temp >>= 1;
DQ0;
DelayNus(6); //延时6us
DQ1;
DelayNus(8); //延时9us
DQ_in;
_NOP();
if(DQ_val) temp |= 0x80;
DelayNus(45); //延时45us
DQ_out;
DQ1;
DelayNus(10); //延时10us
}
_EINT();
return temp;
}
/*******************************************
函数名称:Skip
功 能:发送跳过读取产品ID号命令
参 数:无
返回值 :无
********************************************/
void Skip(void)
{
Write_18B20(0xcc);
}
/*******************************************
函数名称:Convert
功 能:发送温度转换命令
参 数:无
返回值 :无
********************************************/
void Convert(void)
{
Write_18B20(0x44);
}
/*******************************************
函数名称:Read_SP
功 能:发送读ScratchPad命令
参 数:无
返回值 :无
********************************************/
void Read_SP(void)
{
Write_18B20(0xbe);
}
/*******************************************
函数名称:ReadTemp
功 能:从DS18B20的ScratchPad读取温度转换结果
参 数:无
返回值 :读取的温度数值
********************************************/
uint ReadTemp(void)
{
uchar temp_low;
uint temp;
temp_low = Read_18B20(); //读低位
temp = Read_18B20(); //读高位
temp = (temp
-
不会吧
TA的CCR0~CCR2,TB的TBCCR0~TBCCR6就是用来存数的,这么多寄存器,同时捕捉再多几个也没问题!
-
引用 7 楼 wang19847277 的回复:
我用CE5,用SQLCE2.0数据库,长时间后,系统容易死掉,是不是内存问题呢,我释放了啊
这种情况,极有可能是内存的问题
-
晕,在待机模式下......甚至是随便用一根导电的轻轻一碰任意一个无关的管脚,都会触发复位事件(或者是WAKE UP事件)
-
更正一下,不是内置的6db,而是该芯片要求外接两个100欧电阻构成6dB的同相放大器,以达到50欧阻抗匹配和6dB放大的目的,上图把这两个前置运放接成跟随器了。
-
真的不用单片机做呀,有专用的IC一大把啦,用BISS0001也可以,我之前做过,一个BISS0001+热释电红外传感器 再加上自己焊的外围电路就行啦,电路图网上也很易找也挺多样。网上也有成品的模块呀,一个大概15元左右~~
-
你说的能显示,应该是超级终端的回显功能,如果利用串口发送文件,需要设置一下,包括协议和比特率等
-
学习学习
-
应该是在OAL中,OAL中会进行板级初始化
-
谢谢,试过了,出错了,但是不知道哪的的问题。。。。
-
STC的内部EEPROM其实也是FLASH,其数据手册上有读写方法。程序代码容量有限制,点阵屏显示数据大小要算进去,不要超过单片机存储空间,否则当然会出错。
一般如字库较大需外扩一片容量稍大的FLASH的。
-
你首先要解决的是,如何通过软件判断这台机器和那台机器是不同的?
-
91要加班到几号?回复内容太短了!
-
LZ的GPC[5..7]为011,没问题吧。
NBL1的位置没错,NBL2的位置要看你NBL1中代码的设置了。
另外有加调试信息打印吗?NBL1是否有起来???
你可以先调一下NBL1看看:
1. 烧写进入Nand以后,再读出来看看,Block0的page0和Page1中这8k数据是否跟烧入的一样?
2. 上电后用AXD之类Jtag工具看看RAM地址为0-2000的代码(CPU自动加载的地方)是否跟Block0image.nb0前面两个page一样??如果一样,说明已经有加载进去了。并且是nand启动。
-
引用 4 楼 cfanlwn 的回复:
不知道这个培训机构,不过一般培训 只能入门,学一些基础的理论东西,至于实践,还是要靠自己积累的
这个我知道,我是下定决心要做嵌入式了,看来只能通过培训来跨进门了
-
SZSZ.C(9): error C141: syntax error near '=', expected ')'
这些昨天有人提了同样的帖子,是由于你的逗号 是在中文输入法的情况下输入的;
楼主把对应的输入法改为英语,再输入逗号。
-
既然这样,你就在开始操作FRAM之前通过一个I/O口输出一个脉冲,用示波器观察VDD与这个脉冲的关系,这样就可以准确地知道从上电至开始操作FRAM时的时间,从而可以精确地知道是否确实是由于上电延迟的问题了。
-
整段代码贴上来,寻求帮助。
void BSP_Init(void)
{
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/
/* RCC system reset(for debug purpose) */
RCC_DeInit();
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR,ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC
| RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE
| RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig( GPIO_Remap_SWJ_JTAGDisable , ENABLE );
GPIO_Config();
SysTick_Config();
}
static void SysTick_Config(void)
{
RCC_ClocksTypeDef rcc_clocks;
unsigned long cnts;
RCC_GetClocksFreq(&rcc_clocks);
cnts = (unsigned long)rcc_clocks.HCLK_Frequency/1000;
SysTick_SetReload(cnts);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
SysTick_CounterCmd(SysTick_Counter_Enable);
SysTick_ITConfig(ENABLE);
}
int main(void)
{
u32 i;
u8 flag=0;
BSP_Init();
GPIO_SetBits(GPIOA, GPIO_Pin_14);
GPIO_SetBits(GPIOB, GPIO_Pin_7);
// LIS33_Configuration();
SPI_LIS33_CS_LOW();
while(1)
{
// Parse_Lis33();
SPI_LIS33_CS_HIGH();
GPIO_SetBits(GPIOA, GPIO_Pin_All);
for(i=0;i<100000*100;i++)
;
SPI_LIS33_CS_LOW();
GPIO_ResetBits(GPIOA, GPIO_Pin_All);
if(flag==0)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
flag=1;
}
else
{
GPIO_SetBits(GPIOC, GPIO_Pin_5);
flag=0;
}
}
return 1;
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
-
我的pts好像是放置 g_oalAddressTable 表的??
这是开启mmu之前的代码??
不知道你的16k是什么数据?
add r11, pc, #g_oalAddressTable - (. + 8)
ldr r10, =PTs ; (r10) = 1st level page table