C8051f系列开发之keil c单步调试

发布者:EternalWhisper最新更新时间:2018-11-30 来源: eefocus关键字:C8051f系列  keil  单步调试 手机看文章 扫描二维码
随时随地手机看文章

C8051f系列单片机是一种高速,集成度很高的单片机,功能还是蛮强大的。我在用此款单片机读取ST 公司的三轴加速度计的时候发现输出总是全1。于是,我用keil c的单步调试功能。一步一步调试,于是我发现执行到一条把某一管脚置1的语句之后,watch窗口显示的相应管教状态仍是0.



于是我觉得可能是硬件的问题,引脚一直接地被拉低。果然,我在查看电路板的线路时发现sdi和sdo两根线与另外两个引脚相连,而这个连接是我修改版图时无意连接上的。而且一个引脚被配置成高电平,另外一个被配置成低电平。所以sdi和sdo都一直保持低电平和高电平。所以不能对传感器进行正常的配置和读取数据。


另附lis3lv02dq读取程序,采用的是虚拟spi总线。


#include "main.H"


unsigned char spi_comm(unsigned char outgoing_byte)

{

    uchar incoming_byte, x;

 

    acc_spc = 1; //Pull SPI clock high

    for(x = 0 ; x < 8 ; x++)

    {

    if(outgoing_byte&0x80)

          acc_sdi =1; //Put bit on SPI data bus

    else acc_sdi = 0;

          outgoing_byte <<= 1; //Rotate byte 1 to the left

        acc_spc = 0; //Toggle the SPI clock

        acc_spc = 1;

        incoming_byte <<= 1; //Rotate byte 1 to the left

if(acc_sdo)    //Read bit on SPI data bus

       incoming_byte += 0x01;        

    }

    

    return(incoming_byte);

}

unsigned char read_register(unsigned char register_name)

{

    uchar in_byte;

    

    register_name |= 0x80; //Set D7 to 1 for read mode

   acc_cs = 0; //Select LIS

    in_byte = spi_comm(register_name); //SPI read 6-bit register from LIS

    //printf("In1 = %h ", in_byte);

    

    //in_byte is nothing, we need to clock in another 8 bits

    in_byte = spi_comm(0x00); //Send nothing, but we should get back the register value

    

    acc_cs = 1;

    

    return(in_byte);

}

//Sends a write command to LIS

void write_register(unsigned char register_name, unsigned char register_value)

{

    unsigned char in_byte;

    

    register_name &= 0x7f; //Clear D7 to 0 for write mode

    acc_cs = 0; //Select LIS

    in_byte = spi_comm(register_name); //SPI read 6-bit register from LIS

    //printf("In1 = %h ", in_byte);

    

    //in_byte is nothing, we need to clock in the value to write

    in_byte = spi_comm(register_value); //Send nothing, but we should get back the register value

    

    acc_cs = 1;

    

    //Return nothing

}

  

 void acc_spi(void)

  {

    acc_cs = 1; //Unselect LIS

   // CK = 0;

  // acc[0] = read_register(0x0F); //Read register WHO_AM_I   

    write_register(0x20,0xc7); //Power on device, enable all axis, and turn off self test - CTRL_REG1

    delay(5); 

write_register(0x21,0x44);

while(!acc_rdy);     

    acc[1] = read_register(0x28); //Read outx_l

    acc[0] = read_register(0x29); //Read outx_h

acc[3] = read_register(0x2a);

acc[2] = read_register(0x2b);

acc[5] = read_register(0x2c);

acc[4] = read_register(0x2d);

 

        

    }

关键字:C8051f系列  keil  单步调试 引用地址:C8051f系列开发之keil c单步调试

上一篇:AT89S52单片机基础知识详解
下一篇:C51编译器的扩展C语言关键字

推荐阅读最新更新时间:2024-03-16 16:18

基于S3C44B0X和μC/OS-Ⅱ智能家居嵌入式系统设计
随着社会经济的飞速发展及计算机控制技术等科技的进步,人们对自身的生活和工作环境有了更高的要求,由此对家居智能化控制系统的要求也越来越紧迫。设计家居智能化控制系统,对促进住宅现代化建设具有重要意义。   家居智能化控制系统就是指利用先进的计算机技术、网络通信技术、综合布线技术,将与家居生活相关的各种子系统有机结合,从而进行统筹管理,使家居生活更加舒适、安全、有效。   近年来,嵌入式系统设备全面渗透到人们日常生活的各个领域,本文针对智能家居嵌入式系统的软硬件设计需求,以S3C44B0X为处理器进行智能家居系统的硬件设计,以实现μC/OS-Ⅱ在S3C44B0X上的移植。    1 软硬件选择   目前主要的嵌入式处理器类型有38
[工业控制]
基于S3<font color='red'>C</font>44B0X和μ<font color='red'>C</font>/OS-Ⅱ智能家居嵌入式系统设计
米兔儿童电话手表5C拆解:国产儿童手表当然用国产芯片
在多家厂商都在关注智能手表的同时,儿童手表区域也是百花齐放。所以今天要看的是来自小米旗下的米兔儿童手表5C。虽然是一款简单的儿童手表,不过内部细节也还是不少呢。 拆解 取下表带和SIM卡托,卡托上套有硅胶圈用于防水。 后盖四周有4颗螺丝,拧下螺丝,然后使用撬片撬开并取下后盖。在后盖的四周有防水胶条,后盖上还有防水标签,以及位于麦克风处的防尘网。 撬开电池模块,可以看到电池与主板的连接处有屏蔽盖固定。但是屏蔽盖又在扬声器保护盖下面,所以需要分别取下扬声器盖和屏蔽盖后才能取下电池。扬声器保护盖正反两面都贴有黑色胶条。 电池周围有一圈保护盖,保护盖上有两块用于吸附充电器的磁铁。充电软板黏贴在电池保护盖上
[嵌入式]
米兔儿童电话手表5<font color='red'>C</font>拆解:国产儿童手表当然用国产芯片
LCD12864(ST7920)的C8051驱动(并行)
//--------------------st_12864.h------------------------ #ifndef _LCD12864_ST7920 #define _LCD12864_ST7920 #ifndef uint8 #define uint8 unsigned char #endif #ifndef uint16 #define uint16 unsigned int #endif extern void st_writeCmd(uint8 CMD); extern void st_writeDat(uint8 DAT); //extern void Delay(uint16 ms); extern uin
[单片机]
PT1000 C程序 单片机 分度表 程序
python数据处理: import numpy as np A = 0.0038623139728 B = -0.00000065314932626 t1 = np.asarray(range(-150, 152, 1)) print(t1) t = t1 - 0.5 print(t) Rt = 1000 * (1 + A * t + B * t * t) print(Rt) RT1 = list(map(lambda x: str(int(x)), Rt.tolist())) print( , .join(list(map(str, RT1)))) print(len(RT1)) 移植到单片机函数的情况:
[单片机]
STM32F10x_硬件I2C主从通信 (轮询发送,中断接收)
Ⅰ、写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件、硬件)I2C主机控制从机EEPROM的例子。在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信。但在实际项目中作为I2C从机的应用相对要少的多,本文主要讲述关于【STM32F10x_硬件I2C主从通信】中STM32作为从机的例子。 在学习本问内容之前,如果对I2C协议还不太了解的朋友请先去了解一下I2C协议,或看我之前关于I2C通信的文章(我微信公众号和博客都有)。 关于STM32硬件I2C作为从机的文章网上很少(我在写本文之前也在百度、谷歌等网站上搜索了解过),我猜测大概的原因主要是两点:1.使用该功能的人比较少; 2
[单片机]
STM32F10x_硬件I2<font color='red'>C</font>主从通信 (轮询发送,中断接收)
大眼睛索尼Xperia C6真机照来了 看着挺萌的
    还记得去年索尼的一部高颜值手机吗?这部手机以超窄的黑边以及硕大的前置摄像头吸引了不少人的关注。可是这部手机自曝光以来一直没有真机现身,不过还好,最近有外媒曝光出来了真机照,下面一起去看看吧。     从上面的真机图及真机照可以看到,索尼Xperia C6还是保留了全平衡设计,边框也很有索尼的风格。C6搭载的寸1080P屏黑边控制相当出色,此外它还配备了联发科MT6755处理器,内置2GB内存 和16GB存储空间,后置摄像头为2000万像素,而前置摄像头则是媲美其他手机的1300万像素。   这部手机从渲染图到真机真机曝光已经过了很长一段时间了,不知道为什么索尼迟迟未发布。而按照索尼一向的定价规则,这部手机的
[手机便携]
C51编程1-输出电平(点亮LED1)
51单片机中,有4个组I/O口,分别是P0、P1、P2、P3;I/O(Input/Output)口,Input表示输入电平信号,Out表示输出电平信号。在数字电路中,电平有高低电平两种,也就是说I/O口,这个端口可以输入或者输出高低电平。 不同数字电路系统中,对于电平的定义的电压不一样。而在STC89C52中5V的系统中(如下图所示),低于0.8V被识别为低电平,而高于2.0V被识别为高电平。 LED电路原理图: 在51单片机系统中,LED正极接电源VCC(5V),负极接串联一个470欧电阻,连接到单片接P2。 LED点亮原理 : 以P20口为例说明,LED可以点亮的原理。 当单片机P20口的引脚为高电平,
[单片机]
<font color='red'>C</font>51编程1-输出电平(点亮LED1)
指针在c语言中的妙用
指针,任何一个计算机语言都少不了的好东西。特殊问题,特殊对待。函数指针就是这么一个特殊的例子。比如: void Run(void) { PORTB = ~PORTB; } 这个函数我们可以直接在main()里调用它,也可以使用指针。如下所示: void (*fun)(void); int main() { fun = Run; fun(); return 0; } 使用指针有很多优点,关于指针的基本概念可以参考的第十六课: http://www.51hei.com/mcuteach/133.html ,如果我们定义了一个指针数组,就可以同时调用多个已知的函数,在不需要调用的时候再将它删除。特
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved