#include"stm32f10x_lib.h"
//此為位綁定編碼過程 一勞永逸 以后可以直接使用
#define GIPOA_IDR ( GPIOA_BASE + 0X08)
#define GIPOA_ODR ( GPIOA_BASE + 0X0C)
#define GIPOB_IDR ( GPIOB_BASE + 0X08)
#define GIPOB_ODR ( GPIOB_BASE + 0X0C)
#define GIPOC_IDR ( GPIOC_BASE + 0X08)
#define GIPOC_ODR ( GPIOC_BASE + 0X0C)
#define GIPOD_IDR ( GPIOD_BASE + 0X08)
#define GIPOD_ODR ( GPIOD_BASE +0X0C)
#define BitBound(Addr,BitNum) (*((volatile unsignedlong*)((Addr&0xF0000000)+0X2000000+((Addr&0xFFFFF)<<5)+(BitNum<<2))))
#definePAOut(n) BitBound(GIPOA_ODR,n)
#definePAIn(n) BitBound(GIPOA_IDR,n)
#definePBOut(n) BitBound(GIPOB_ODR,n)
#definePBIn(n) BitBound(GIPOB_IDR,n)
#definePCOut(n) BitBound(GIPOC_ODR,n)
#definePCIn(n) BitBound(GIPOC_IDR,n)
#definePDOut(n) BitBound(GIPOD_ODR,n)
#definePDIn(n) BitBound(GIPOD_IDR,n)
void delay_nms(u16 data);//此時需要函數聲明
//
//int main(void)
//{
//
// GPIOA->CRL=0X33333333; //設置GPIOA的低八位為推挽式輸出 50mhz
// GPIOA->CRH=0X44444444; //設置GPIOA的高八位為 浮空型 輸入
// while(1)
// {
// if( PAIn(8) ==0) //PA.8按下
// PAOut(0) =0; //LED亮
// else
// PAOut(0) = 1;
// if( PAIn(9) == 0)
// PAOut(1) = 0;
// else
// PAOut(1) = 1;
// if( PAIn(10) == 0)
// PAOut(2) = 0;
// else
// PAOut(2) = 1;
//
// }
//}
int main(void)
{
u8 data,i;
//GPIOA.0 為a,b GPIOA.1 為clock gpioa.0為clear
// 164通信 QA-QH 輸出為0x10010011 PA.0來產生DATA PA.1來做時鐘
GPIOA->CRL=0x33; //A.0 A.1為推挽式 輸出 50mhz
GPIOB->CRL=0X03; //B.0 為推挽式 輸出 50mhz
PBOut(0)=1; //PB.0為高 說明clear 此時無效
data=0x93;
for(i=0;i<8;i++)
{
PAOut(1)=0; //為時鐘的上升沿做準備哦!親!
if((data&0x01)==0x01) PAOut(0)=1;
else PAOut(0)=0;
delay_nms(1);
PAOut(1)=1;
delay_nms(1);
data=data>>1;
}
return (1);
}
void delay_nms(u16 data)
{
u16 i,j;
for(i=0;i
for(j=1000;j>0;j--) ;
}
|