Cho mình hỏi làm sao để truy cập vào một bít của thanh ghi trong avr dùng C.Ví dụ bây giờ minh muốn đọc hoạc ghi giá tri của bit TOV1( Timer/Counter1, Overflow Flag) trong thanh ghi TIFR(trong time 1) thi câu lệnh phải như thế nào(trong lập trinh C)??
Thông báo
Collapse
No announcement yet.
Giúp lệnh trong C
Collapse
X
-
câu lệnh ngắn nhất để check bit là kiểu này:
hoặcCode:if (TIFR & (1<<2)) ...do_something;
với điều kiện TOV1 đã được định nghĩa là 2 (codevision không định nghĩa bit, bạn phải tự định nghĩa hoặc viết như câu trên)Code:if (TIFR & (1<<TOV1)) ...do_something;
1<<2 là dịch 1 sang trái 2 bit, nghĩa là 0000 0100
lấy cái này "&" với TIFR sẽ bằng 0 nếu TOV1=0, khác 0 nếu TOV1=1Đẹp từng kilomét
-
if((i==0xB9&&j==0xC9)||(i==0xBD&&j==0xC9));Nguyên văn bởi vdh246 Xem bài viếtif((i==0xB9&&j==0xC9)||(i==0xBD&&j==0xC9));
và P3|=0x38;
"<<="
4dau "|=","&&", "<<=", "=>>"
có nghĩa là gì nhỉ các pro?
Giải thích luôn jup em đoạn lệnh tren nha?
1. Lệnh này viết không rõ ràng và dễ làm sai chương trình. Em phải tự hỏi em muốn chương trình làm gì với lệnh này ?
Em dùng if( logic ) { các lệnh khác nếu logic là true }
else { các lệnh nếu logic là false }
Ở đây em không có một lệnh nào cả.
2. (i==0xB9&&j==0xC9) : viết hà tiện chữ như thế này sẽ có kết quả như em muốn:
a) == có ưu tiên hơn &&
b) như vậy i sẽ được so sánh với 0xB9 và j được so sánh với 0xC9 rồi 2 kết quả được kết hợp qua logic && (AND).
3. (i==0xBD&&j==0xC9) tương tự như mục 2.
4. kết quả của 2. và 3. sẽ || (OR) với nhau để cho logic của if
5. Vì sau đó là dấu (
thành ra lệnh này không làm gì cả
P3|=0x38; có nghĩa là trị giá ở trong P3 sẽ được OR với 0x38 rồi bỏ trở lại vào P3.
Thí dụ P3 = 0x52 ==> in binary P3 = 0101 0010
OR với 0x38 ==> in binary 0x38 = 0011 1000
--------------------------------------------------
P3 = 0111 1011 = 0x7B
|= xem thí dụ ở trên
&& có nghĩa là logical AND
Thí dụ: x = TRUE, y = TRUE (x && y) = TRUE
x = FALSE, y = TRUE, (x && y) = FALSE
Thí dụ: x = 0x03 ==> in binary x = 0000 0011
x <<= 2; ==> shift trị số của x 2 lần về bên trái x = 0000 1100
x = 0x0C
shift 1 lần về bên trái tương đương nhân số đó với 2
x =>>2; x = 0000 0000 = 0x00
Comment
-
Mình cũng có ý kiến về việc đọc/ ghi trong thanh ghi:
-Đọc: ví dụ đọc bit thu 3 trong thanh ghi A thì làm như sau:
data= A & 0x08; //trich bit thu 3 ra.
data >>=3;// dich phai 3 bit
//sau đó bạn sẽ xem giá trị của data la 1 or 0 để thực hiện việc gì đó
-Ghi: ví dụ ghi gia tri 1 vao bit thu 3 trong thanh ghi A thì làm như sau:
A |=0x08;// hoặc có the viết A= A|0x08;
ví dụ ghi gia tri 0 vao bit thu 3 trong thanh ghi A thì làm như sau:
A &=0xF7;// hoặc có the viết A= A&0xF7;
Vài dỏng cho bạn, mời mọi người góp ý!
Comment
-
Em viết chương trình phát hồng ngoại điều khiển 4 kênh theo cách mã hóa của sony mọi người xem có được không.Cho em hỏi luôn làm cách nào để mình giả lập proteus chương trình phát và nhận hồng ngoại.Thanks.Attached Files
Comment
-
Bac oi cai doan code doc ma trong remote the nay!em chua hieu lam bac thu giai thic jup voi?
void isr (void) interrupt 0 //ngat int0 P3.2.. Nhan tin hieu tu IR dieu khien
{
bit databit;
unsigned char dem,tre,k,mang;
EX0=0;
dem=12;
mang=7;
k=0;
if (check())
{
while(dem--)
{
while(signal);
delay_900us();
// delay(8);
databit=~signal; //dao lai bit. databit co dang nhu khi dk phat ra.
if(databit) // kiem tra bit, neu bit = 1 thi gan phan tu thu k
// co gia tri datasignal[k]=1
{
datasignal[k]|=0x01;
while(!signal);
}
else //nguoc lai databit = 0 gan datasignal[k]=0;
datasignal[k]&=0xFE;
if((mang--)==0)
{
mang=7;
k++;
}
else
datasignal[k]<<=1; // dic trai 1 bit
}
lenhsuly();
tre=250;
while(tre--)
{
//delay(2);
delay_200us();
if(!signal) tre=250;
}
}
EX0=1;
}
Mấy cái lệnh đọc và ghi vào thanh ghi lênh bác chỉ giáo rõ ràng cho em với?
Comment
-
Mình hay dùng như dưới đây, xin chia sẻ với các bạn!Nguyên văn bởi zinix Xem bài viếtMình cũng có ý kiến về việc đọc/ ghi trong thanh ghi:
-Đọc: ví dụ đọc bit thu 3 trong thanh ghi A thì làm như sau:
data= A & 0x08; //trich bit thu 3 ra.
data >>=3;// dich phai 3 bit
//sau đó bạn sẽ xem giá trị của data la 1 or 0 để thực hiện việc gì đó
-Ghi: ví dụ ghi gia tri 1 vao bit thu 3 trong thanh ghi A thì làm như sau:
A |=0x08;// hoặc có the viết A= A|0x08;
ví dụ ghi gia tri 0 vao bit thu 3 trong thanh ghi A thì làm như sau:
A &=0xF7;// hoặc có the viết A= A&0xF7;
Vài dỏng cho bạn, mời mọi người góp ý!
- Đọc bit i trong thanh ghi X rồi đưa vào biến kb: kb=(X>>i)&1;
- Ghi (mức 1) bit i ra thanh ghi X: X=X|(1<<i);
- Ghi (mức 0) bit i ra thanh ghi X: X=X&~(1<<i);
Từ 3 lệnh trên ta có thể viết chúng thành các macro, để dành, sài dần.!e
Comment
-
Kiểm tra bit
Tôi nghĩ nếu chỉ để kiểm tra 1 bit nào đó thì không cần phải thêm thao tác dịch bit. Sau khi AND logic với mặt nạ để giữ lại bit cần kiểm tra, các bit khác đã = 0 hết rồi. Như vậy thì chỉ cần kiểm tra kết quả sau phép AND là = 0 hay khác 0. Nếu khác 0 thì bit ở vị trí nào trong byte cũng vai trò như nhau cả.Nguyên văn bởi zinix Xem bài viếtMình cũng có ý kiến về việc đọc/ ghi trong thanh ghi:
-Đọc: ví dụ đọc bit thu 3 trong thanh ghi A thì làm như sau:
data= A & 0x08; //trich bit thu 3 ra.
data >>=3;// dich phai 3 bit
//sau đó bạn sẽ xem giá trị của data la 1 or 0 để thực hiện việc gì đó
Ví dụ:
data = A&0x08;
if(data) // nếu bit khác 0
...
Thân mến,
blackmoon.
Comment
-
Rất chính xácNguyên văn bởi blackmoon Xem bài viếtTôi nghĩ nếu chỉ để kiểm tra 1 bit nào đó thì không cần phải thêm thao tác dịch bit. Sau khi AND logic với mặt nạ để giữ lại bit cần kiểm tra, các bit khác đã = 0 hết rồi. Như vậy thì chỉ cần kiểm tra kết quả sau phép AND là = 0 hay khác 0. Nếu khác 0 thì bit ở vị trí nào trong byte cũng vai trò như nhau cả.
Ví dụ:
data = A&0x08;
if(data) // nếu bit khác 0
...
Thân mến,
blackmoon.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi davidcopyBạn muốn hỏi nguyên lý làm việc của mạch nào...
-
Channel: Hỗ trợ học tập
Hôm qua, 22:50 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi N_Tu_Hoc_HoiBạn cần sơ đồ mạch ổn áp bao nhiêu Volt, Nếu giống anh bạn guiwr có khả năng ổn áp dùng iC họ 78XX, 79XX. Những mạch này bạn tim kiếm trên google sẽ thấy!!
-
Channel: Hỗ trợ học tập
23-03-2026, 02:32 -
-
bởi chinhnguyen9
Điến âp vào 24V;Điên áp ra 30V;Dòng điện ra 10A
Trên nền tảng mạch Boost thay đổi như sau: cự âm tụ lọc C không nối mas mà nối vào Vc +24V
Mach phản hồi tao điê áp trên tụ lọc này ổn đinh ở 6V
Kết quả:
· Điện áp ra =24V+ 6V=30V
· Công...-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:33 -
-
bởi chinhnguyen92. Các yếu tố để dòng điện đầu ra không bị "thiếu"
Dòng điện đầu ra bị "thiếu" có thể hiểu là không đủ 10A theo yêu cầu hoặc bị sụt áp khi tải thay đổi. Để đảm bảo điều này, bạn cần xem xét các yếu tố sau:
a. Khả năng chịu dòng của cuộn cảm- Dòng bão hòa (I_sat): Như
-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:06 -
bởi chinhnguyen9
1. Tính toán cuộn cảm (Inductor)
Để tính giá trị cuộn cảm, chúng ta cần thực hiện các bước sau:
a. Xác định chu kỳ nhiệm vụ (Duty Cycle - D)
Với mạch tăng áp lý tưởng, chu kỳ nhiệm vụ được tính theo công thức :
D=1-VinVout=1-24V30V=0.2
Vậy D = 0.2 (20%)
b....-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:03 -
-
bởi chinhnguyen9Công thức
Gain (dB) = 20 × log₁₀(A)
Thí dụ 1; 60dB
log₁₀(A)=60/20=3
⇒ A=V_out / V_in = 10³ = 1.000
Thí dụ 2; 100dB
log₁₀(A)=100/20=5
⇒ A=V_out / V_in = 105 = 100.000
Tí dụ 3; LM 358
Large Signal Open Loop Voltage Gain AVOL V/mV RL = 2.0...-
Channel: Hướng dẫn sử dụng diễn đàn
19-03-2026, 08:44 -
-
Trả lời cho Mạch 3s bị giảm điện áp đầu rabởi minhtri0405chả biết bạn xử lý được chưa , kích sạc hoặc điện áp > điện áp khối pin vào 2 chân P - P+ , nhiều mạch phải yêu cầu có kích lần đầu sau đó mới chạy...
-
Channel: Điện tử dành cho người mới bắt đầu
18-03-2026, 10:01 -
-
bởi minhtri0405đây có phải là 1 cách để test mosfet xịn hay dỏm khi mua đồ tàu không nhỉ , vì ko thể đập ra để coi lõi rồi trả hàng được....
-
Channel: Tâm tình dân kỹ thuật
18-03-2026, 09:57 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
16-03-2026, 18:05 -

Comment