① MSP430或 51系列單片機有沒有帶I2C介面的啊
msp430的15、16系列的
還有2系列的都有I2c介面
程序源代碼
ti網站上有
直接下就可以
每一種都有相應的code
library。
貼一個2274的i2c代碼吧
希望對你有用
include
"msp430x22x4.h"
unsigned
int
RxByteCtr;
unsigned
int
RxWord;
void
main(void)
{
WDTCTL
=
WDTPW
+
WDTHOLD;
//
Stop
WDT
P1DIR
|=
0x01;
//
P1.0
output
P3SEL
|=
0x06;
//
Assign
I2C
pins
to
USCI_B0
UCB0CTL1
|=
UCSWRST;
//
Enable
SW
reset
UCB0CTL0
=
UCMST
+
UCMODE_3
+
UCSYNC;
//
I2C
Master,
synchronous
mode
UCB0CTL1
=
UCSSEL_2
+
UCSWRST;
//
Use
SMCLK,
keep
SW
reset
UCB0BR0
=
12;
//
fSCL
=
SMCLK/12
=
~100kHz
UCB0BR1
=
0;
UCB0I2CSA
=
0x4e;
//
Set
slave
address
UCB0CTL1
&=
~UCSWRST;
//
Clear
SW
reset,
resume
operation
IE2
|=
UCB0RXIE;
//
Enable
RX
interrupt
TACTL
=
TASSEL_2
+
MC_2;
//
SMCLK,
contmode
while
(1)
{
RxByteCtr
=
2;
//
Load
RX
byte
counter
UCB0CTL1
|=
UCTXSTT;
//
I2C
start
condition
__bis_SR_register(CPUOFF
+
GIE);
//
Enter
LPM0,
enable
interrupts
//
Remain
in
LPM0
until
all
data
//
is
RX'd
if
(RxWord
<
0x1d00)
//
>28C?
P1OUT
&=
~0x01;
//
No,
P1.0
=
0
else
P1OUT
|=
0x01;
//
Yes,
P1.0
=
1
__disable_interrupt();
TACCTL0
|=
CCIE;
//
TACCR0
interrupt
enabled
__bis_SR_register(CPUOFF
+
GIE);
//
Enter
LPM0,
enable
interrupts
//
Remain
in
LPM0
until
TACCR0
//
int
查看原帖>>
② MSP430系列單片機跟藍牙串口模塊相連的是哪個介面啊
msp430的15、16系列的 還有2系列的都有I2c介面 程序源代碼 ti網站上有 直接下就可以 每一種都有相應的code library。
貼一個2274的i2c代碼吧 希望對你有用
include "msp430x22x4.h"
unsigned int RxByteCtr;
unsigned int RxWord;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x01; // P1.0 output
P3SEL |= 0x06; // Assign I2C pins to USCI_B0
UCB0CTL1 |= UCSWRST; // Enable SW reset
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x4e; // Set slave address
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
IE2 |= UCB0RXIE; // Enable RX interrupt
TACTL = TASSEL_2 + MC_2; // SMCLK, contmode
while (1)
{
RxByteCtr = 2; // Load RX byte counter
UCB0CTL1 |= UCTXSTT; // I2C start condition
__bis_SR_register(CPUOFF + GIE); // Enter LPM0, enable interrupts
// Remain in LPM0 until all data
// is RX'd
if (RxWord < 0x1d00) // >28C?
P1OUT &= ~0x01; // No, P1.0 = 0
else
P1OUT |= 0x01; // Yes, P1.0 = 1
__disable_interrupt();
TACCTL0 |= CCIE; // TACCR0 interrupt enabled
__bis_SR_register(CPUOFF + GIE); // Enter LPM0, enable interrupts
// Remain in LPM0 until TACCR0
// interrupt occurs
TACCTL0 &= ~CCIE; // TACCR0 interrupt disabled
}
}
#pragma vector = TIMERA0_VECTOR
__interrupt void TA0_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF); // Exit LPM0
}
// The USCIAB0TX_ISR is structured such that it can be used to receive any
// 2+ number of bytes by pre-loading RxByteCtr with the byte count.
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
RxByteCtr--; // Decrement RX byte counter
if (RxByteCtr)
{
RxWord = (unsigned int)UCB0RXBUF << 8; // Get received byte
if (RxByteCtr == 1) // Only one byte left?
UCB0CTL1 |= UCTXSTP; // Generate I2C stop condition
}
else
{
RxWord |= UCB0RXBUF; // Get final received byte,
// Combine MSB and LSB
__bic_SR_register_on_exit(CPUOFF); // Exit LPM0
}
}
③ MSP430單片機,如果在接收中斷函數中經過判斷之後,想把UCA0RXBUF緩沖區中的數據清空,怎
合法的,將接收到的數據發送出去;
以上語句等價於:
UCA0TXBUF = UCB0RXBUF;
xxx = UCA0TXBUF;
④ 單片機如何實現ucb通信功能
有專用的USB轉換晶元,用單片機和它連接,由這個晶元和USB設備通信即可。比如CH374、PDIUSBD12等。
如果電路板太小,建議用自帶USB功能的單片機。51系列中,C8051F的單片機有自帶USB模塊的。PIC、AVR的單片機也有類似功能,另外,網上也有關於直接用PIC或AVR單片機IO口進行軟體模擬USB通信的程序。(用51實現軟體模擬可能復雜點)。
⑤ 如何實現VC與單片機RS-232通訊控制
有c語言基礎開發RS-232,用c++,MFC開發,(開發com使用簡單c++語句就可以了,不難跟你用的c語言很相似)vb更容易實現同樣功能,但是vc是大勢所趨,看一下龔建偉的RS232串口設計,非常簡單,最主要就是電話控制項(串口的控制項),書上面源代碼有,買一本,串口助手實現的源碼也有,也很容易,一個禮拜就看完,書上從最簡單的用PC控制跑馬燈講解,放寒假可以練習,平時上課時間久別去弄了,高考要緊,想研究單片機或者更復雜的嵌入式上面,時間不夠用,在沒人帶你的情況下要走的路也很曲折,在應試教育的情況下,先把高考這關過了。
⑥ 430f5529單片機控制語音模塊SYN6288,編了一個程序,不成功。求大神指教。
不看軟體,在硬體上單片機的TxD到模塊的接收端要接一個非門,才能正常通信。好好看數據手冊。
⑦ 求單片機大神技術帝幫忙!!基於msp430的電子秤問題。lcd顯示和稱重沒問題。但是連接後屏幕數字無變化。
uart_init函數的問題。
UCA0工作於UART模式時,需要設置相應的IO口,並打開IO口的第二功能。
還有一點,建議不要使用20次累加演算法,建議8次或者16次,用移位來計算結果。因為430的除法是用軟體實現的,會佔用大量的CPU時間。