OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5039|回复: 5

求助原子哥,这个还是没懂,不知道哪里错了(gm8142模块)

[复制链接]

4

主题

8

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2014-8-1
在线时间
0 小时
发表于 2014-8-3 22:20:48 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include<stc12c5a.h> #define BYTE unsigned char #define WORD unsigned int #define HIGH 1 #define LOW 0 #define FALSE 0 #define TRUE 1 sbit SCLK=P1^7; sbit DIN=P1^5; sbit DOUT=P1^6; void ClrCS(void) {P14=0;} void SetCS(void) {P14=1;} void Delay(unsigned int nTime) { while(--nTime) {;} } /*********************************************************** Function: Delay Describe: Time delay Input: Byte formated time Output: void ***********************************************************/ /*********************************************************** Function: SPI_Initial Describe: Initialize the SPI interface Input: void Output: void ***********************************************************/ void SPI_Initial(void) { SCLK = LOW; DIN = LOW; DOUT = LOW; Delay(5); } /*********************************************************** Function: SPI_Transmit Describe: Send and receive 16-bit data from the SPI interface Input: 16-bit data to be send Output: 16-bit data of read, user analyse the validity ***********************************************************/ WORD SPITransmit(WORD wSendData) { BYTE i; WORD wReadData; wReadData = 0; for(i = 0; i < 16; i++) { if(wSendData & 0x8000) DIN = 1; else DIN = 0; wReadData<<=1; //Shift first, then fill the bit SCLK = HIGH; wSendData<<= 1; wReadData |= DOUT; //Receive the 16-bit data Delay(5); SCLK = LOW; Delay(5); //Can be comment by acture use } return(wReadData); } unsigned int SendTo814X(unsigned char chigh,unsigned char clow) { unsigned int cTempHigh,cTempLow; unsigned int RevData; ClrCS(); //置814x片选有效 Delay(10); //延时时间参考814x数据手册的要求 cTempHigh=SPITransmit(chigh); //向814X发送高位数据 cTempLow=SPITransmit(clow); //向814X发送低位数据 Delay(10); //延时时间参考814x数据手册的要求 SetCS(); //置814x片选无效 RevData=cTempHigh<<8|cTempLow; return RevData; //返回从814x读出的数据 } unsigned int Write814xConfig(unsigned char n,unsigned char high,unsigned char low) //n 表示设置的串口号,high表示给配置寄存器的高位字节(低三位有效),low表示给配置寄存器的低位字节 { unsigned char ch; unsigned int RevData; high=high&0x07; ch= 0xc0 | (n<< 3); high=high|ch; RevData=SendTo814X(high,low); //向指定的串口功能设置寄存器写配置 Delay(5); return RevData; } unsigned int SendToAllCom(unsigned char c,bit Pt) //c为需要发送的数据,Pt为第九位数据 { unsigned char ch; unsigned int RevData; if(Pt) ch=0xa1; else ch=0xa0; RevData=SendTo814X(ch,c); return RevData; //向所有串口发送数据并读出接收FIFO数据 } void main() { Write814xConfig(1,0xc0,0xaa); //SendToAllCom(0xaa,0); }[/mw_shl_code]

SX-UART-KB资料.zip

943.04 KB, 下载次数: 315

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2014-8-1
在线时间
0 小时
 楼主| 发表于 2014-8-3 22:27:01 | 显示全部楼层
[mw_shl_code=c,true]#include<stc12c5a.h> #define BYTE unsigned char #define WORD unsigned int #define HIGH 1 #define LOW 0 #define FALSE 0 #define TRUE 1 sbit SCLK=P1^7; sbit DIN=P1^5; sbit DOUT=P1^6; void ClrCS(void) {P14=0;} void SetCS(void) {P14=1;} void Delay(unsigned int nTime) { while(--nTime) {;} } /*********************************************************** Function: Delay Describe: Time delay Input: Byte formated time Output: void ***********************************************************/ /*********************************************************** Function: SPI_Initial Describe: Initialize the SPI interface Input: void Output: void ***********************************************************/ void SPI_Initial(void) { SCLK = LOW; DIN = LOW; DOUT = LOW; Delay(5); } /*********************************************************** Function: SPI_Transmit Describe: Send and receive 16-bit data from the SPI interface Input: 16-bit data to be send Output: 16-bit data of read, user analyse the validity ***********************************************************/ WORD SPITransmit(WORD wSendData) { BYTE i; WORD wReadData; wReadData = 0; for(i = 0; i < 16; i++) { if(wSendData & 0x8000) DIN = 1; else DIN = 0; wReadData<<=1; //Shift first, then fill the bit SCLK = HIGH; wSendData<<= 1; wReadData |= DOUT; //Receive the 16-bit data Delay(5); SCLK = LOW; Delay(5); //Can be comment by acture use } return(wReadData); } unsigned int SendTo814X(unsigned char chigh,unsigned char clow) { unsigned int cTempHigh,cTempLow; unsigned int RevData; ClrCS(); //置814x片选有效 Delay(10); //延时时间参考814x数据手册的要求 cTempHigh=SPITransmit(chigh); //向814X发送高位数据 SetCS(); Delay(10); ClrCS(); cTempLow=SPITransmit(clow); //向814X发送低位数据 Delay(10); //延时时间参考814x数据手册的要求 SetCS(); //置814x片选无效 RevData=cTempHigh<<8|cTempLow; return RevData; //返回从814x读出的数据 } unsigned int Write814xConfig(unsigned char n,unsigned char high,unsigned char low) //n 表示设置的串口号,high表示给配置寄存器的高位字节(低三位有效),low表示给配置寄存器的低位字节 { unsigned char ch; unsigned int RevData; high=high&0x07; ch= 0xc0 | (n<< 3); high=high|ch; RevData=SendTo814X(high,low); //向指定的串口功能设置寄存器写配置 Delay(5); return RevData; } unsigned int SendToAllCom(unsigned char c,bit Pt) //c为需要发送的数据,Pt为第九位数据 { unsigned char ch; unsigned int RevData; if(Pt) ch=0xa1; else ch=0xa0; RevData=SendTo814X(ch,c); return RevData; //向所有串口发送数据并读出接收FIFO数据 } void main() { Write814xConfig(1,0xc0,0xaa); //SendToAllCom(0xaa,0); }[/mw_shl_code]

回复

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2014-8-1
在线时间
0 小时
 楼主| 发表于 2014-8-3 22:27:15 | 显示全部楼层
我改了一下代码
回复

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2014-8-1
在线时间
0 小时
 楼主| 发表于 2014-8-3 22:30:32 | 显示全部楼层


而且在debug里面的P1^6 P1^5 P1^4都是没有的,但是用示波器却能看到
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165312
金钱
165312
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-3 23:56:42 | 显示全部楼层
帮顶。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

13

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2012-10-18
在线时间
4 小时
发表于 2017-10-15 19:59:43 | 显示全部楼层
很想请教下这个芯片的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 21:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表