STC89C52 CAN Bus サンプルコード
UIROBOT CAN Bus 製品の STC89C52 開発サンプルコード。8051 マイクロコントローラ、UART-CAN、モータ制御。
# STC89C52 CAN Bus サンプルコード
このページでは、STC89C52 8051 マイクロコントローラを使用して UIROBOT CAN bus デバイスを制御するためのサンプルコードを提供します。
---
## Quick Selection
| 接続方法 | 対応製品 | ドキュメント |
|---------|---------|-------------|
| **UART-CAN (UIM2513)** | UIM342, UIM342A | [AN021] |
## セクション 1: UART-CAN (UIM2513)
### 背景
STC89C52 の UART インターフェースを UIM2513 ゲートウェイに接続して CAN bus モータを制御します。
### 配線
```
STC89C52 UIM2513
TXD (P3.1) ------> RX
RXD (P3.0) <------ TX
GND ------> GND
```
### サンプルコード
```c
#include <reg52.h>
#define MOTOR_ID 0x05
void UART_Init() {
TMOD = 0x20; // タイマ1、モード2
TH1 = 0xFD; // 9600 bps @ 11.0592MHz
SCON = 0x50; // モード1、受信有効
TR1 = 1;
}
void UART_SendByte(unsigned char dat) {
SBUF = dat;
while(!TI);
TI = 0;
}
void CAN_SendSpeed(unsigned char id, unsigned int speed) {
UART_SendByte(0xAA); // フレームヘッダ
UART_SendByte(id); // CAN ID
UART_SendByte(0x1D); // CW: JV 設定
UART_SendByte(speed & 0xFF); // 速度下位
UART_SendByte((speed >> 8) & 0xFF); // 速度上位
UART_SendByte(0xCC); // フレーム終了
}
void main() {
UART_Init();
while(1) {
CAN_SendSpeed(MOTOR_ID, 1000); // 1000 pps
// ...
}
}
```
---
## ダウンロード
| アプリケーションノート | 説明 | ダウンロードリンク |
|---------------------|------|-----------------|
| AN021 | STC89C52 + UIM2513 | [Download ZIP](https://www.uirobot.com) |
---
## 関連ドキュメント
- [UIM2513 RS232-CAN ゲートウェイ](/docs/uim2513)
- [STM32 サンプルコード](/docs/stm32-examples)
- [Arduino CAN Bus サンプルコード](/docs/arduino-examples)
---
*最終更新: 2026-07-03*