Công này đoạn code này gây ra lỗi sai :
//---------------------------------------------------------------
ngan=so_vong/1000;
tram=(so_vong-ngan*1000)/100;
chuc=(so_vong-ngan*1000-tram*100)/10;
donvi=so_vong%10;
//---------------------------------------------------------------
mình cũng đã từng gặp lỗi này , nhưng ko thể nào điều chỉnh được :
nguyên nhân là do trình dịch CCS không sử lý được phép chia > 8 bit :
vi du :
unsigned char so1,so2,so3,so4 ;
//---------------------------------------------------------
void tach_so( unsigned int data )
{
so1 = data / 1000 ;
so2 = (data % 1000)/100 ;
so3 = ((data % 1000)%100)/10 ;
so4 = ((data % 1000)%100)%10 ;
}
//----------------------------------------------------------
void main(void)
{
TRISA=0xff;
TRISB=0xff;
TRISC=0x00;
TRISD=0x00;
while(1)
{
tach_so( 1234 ) // cho kết quả hiển thị sai
hien_thi( so1 );
hien_thi( so2 );
hien_thi( so3 );
hien_thi( so4 );
};
}
//------------------------------------------------
nếu gán cho hàm : tach_so( 1234 ) ( data > 255 ) thì kết quả hiển thị sẽ sai , còn nếu gán cho hàm : tach_so( 223 ) ( data < 255 ) thì kết quả hiển thị đúng .
|